sql >> Base de Datos >  >> RDS >> Oracle

Cómo exportar resultados de consultas de Oracle a un archivo JSON cuando se usa SQLcl

Cuando usa SQLcl con Oracle Database, puede exportar los resultados de su consulta a un archivo JSON con el SPOOL comando.

Ejemplo

Aquí hay un ejemplo que exporta una tabla completa:

SET SQLFORMAT json;
SPOOL '/Users/barney/data/regions.json';
SELECT * FROM regions;
SPOOL off;
SET SQLFORMAT ansiconsole;

Esto es lo que hizo, línea por línea:

  • La primera línea establece SQLFORMAT a json . Esto asegura que nuestro .json resultante de hecho, el archivo contiene JSON. Alternativamente, puede usar json-formatted para generar el JSON en un formato más amigable para los humanos (más sobre esto más adelante).
  • La segunda línea usa el SPOOL comando para especificar dónde se escribirá el archivo de salida. Asegúrese de cambiar /Users/barney/data/regions.json a una ubicación en su sistema y un nombre de archivo apropiado.
  • En la tercera línea, ejecuté la consulta SQL:los resultados que estoy exportando. En este caso, exporté las regions completas. mesa.
  • Luego, giré SPOOL apagado.
  • Por último, establecí SQLFORMAT volver a mi configuración original, que era ansiconsole . Esto es opcional; puede dejarlo en json si lo prefiere, o cámbielo por otro.

Así es como se ve el archivo resultante:

{"results":[{"columns":[{"name":"REGION_ID","type":"NUMBER"},{"name":"REGION_NAME","type":"VARCHAR2"}],"items":
[
{"region_id":1,"region_name":"Europe"}
,{"region_id":2,"region_name":"Americas"}
,{"region_id":3,"region_name":"Asia"}
,{"region_id":4,"region_name":"Middle East and Africa"}
]}]}
4 rows selected. 

Como se mencionó, también tiene la opción de usar json-formatted para generar el JSON en un formato más amigable para los humanos, con sangrías, etc. He incluido un ejemplo de esto al final de este artículo.

Eliminar comentarios

Puede eliminar la X rows selected con SET FEEDBACK off :

SET SQLFORMAT json;
SET FEEDBACK off;
SPOOL '/Users/barney/data/regions_feedback_off.json';
SELECT * FROM regions;
SPOOL off;
SET FEEDBACK on;
SET SQLFORMAT ansiconsole;

Resultado:

{"results":[{"columns":[{"name":"REGION_ID","type":"NUMBER"},{"name":"REGION_NAME","type":"VARCHAR2"}],"items":
[
{"region_id":1,"region_name":"Europe"}
,{"region_id":2,"region_name":"Americas"}
,{"region_id":3,"region_name":"Asia"}
,{"region_id":4,"region_name":"Middle East and Africa"}
]}]}

En este caso, convertí FEEDBACK volver a encender después de exportar el archivo.

Adjuntar los resultados

Por defecto, SPOOL usa REPLACE , que reemplaza el archivo si ya existe.

Sin embargo, podemos usar el APPEND argumento para agregar los resultados al archivo.

Ejemplo:

SET SQLFORMAT json;
SET FEEDBACK off;
SPOOL '/Users/barney/data/regions_feedback_off.json' APPEND;
SELECT * FROM regions;
SPOOL off;
SET FEEDBACK on;
SET SQLFORMAT ansiconsole;

Archivo resultante:

{"results":[{"columns":[{"name":"REGION_ID","type":"NUMBER"},{"name":"REGION_NAME","type":"VARCHAR2"}],"items":
[
{"region_id":1,"region_name":"Europe"}
,{"region_id":2,"region_name":"Americas"}
,{"region_id":3,"region_name":"Asia"}
,{"region_id":4,"region_name":"Middle East and Africa"}
]}]}
{"results":[{"columns":[{"name":"REGION_ID","type":"NUMBER"},{"name":"REGION_NAME","type":"VARCHAR2"}],"items":
[
{"region_id":1,"region_name":"Europe"}
,{"region_id":2,"region_name":"Americas"}
,{"region_id":3,"region_name":"Asia"}
,{"region_id":4,"region_name":"Middle East and Africa"}
]}]}

Este ejemplo agregó los resultados al archivo que se creó (y completó) en el ejemplo anterior. Esto dio como resultado que la salida de la consulta se duplicara en el archivo.

Sobrescribir el archivo existente

Podemos usar REPLACE para sobrescribir el archivo existente con los resultados de una nueva consulta:

SET SQLFORMAT json;
SET FEEDBACK off;
SPOOL '/Users/barney/data/regions_feedback_off.json' REPLACE;
SELECT * FROM regions;
SPOOL off;
SET FEEDBACK on;
SET SQLFORMAT ansiconsole;

Archivo resultante:

{"results":[{"columns":[{"name":"REGION_ID","type":"NUMBER"},{"name":"REGION_NAME","type":"VARCHAR2"}],"items":
[
{"region_id":1,"region_name":"Europe"}
,{"region_id":2,"region_name":"Americas"}
,{"region_id":3,"region_name":"Asia"}
,{"region_id":4,"region_name":"Middle East and Africa"}
]}]}

Como se mencionó, REPLACE es la configuración predeterminada, por lo que simplemente podríamos haber omitido este argumento por completo.

JSON formateado

Alternativamente, puede usar json-formatted para generar el JSON en un formato más amigable para los humanos:

SET SQLFORMAT json-formatted;
SPOOL '/Users/barney/data/regions_formatted.json';
SELECT * FROM regions;
SPOOL off;
SET SQLFORMAT ansiconsole;

Resultado:

{
  "results" : [
    {
      "columns" : [
        {
          "name" : "REGION_ID",
          "type" : "NUMBER"
        },
        {
          "name" : "REGION_NAME",
          "type" : "VARCHAR2"
        }
      ],
      "items" : [
        {
          "region_id" : 1,
          "region_name" : "Europe"
        },
        {
          "region_id" : 2,
          "region_name" : "Americas"
        },
        {
          "region_id" : 3,
          "region_name" : "Asia"
        },
        {
          "region_id" : 4,
          "region_name" : "Middle East and Africa"
        }
      ]
    }
  ]
}