Quando utilizzi SQLcl con Oracle Database, puoi esportare i risultati della query in un file JSON con SPOOL
comando.
Esempio
Ecco un esempio che esporta un'intera tabella:
SET SQLFORMAT json;
SPOOL '/Users/barney/data/regions.json';
SELECT * FROM regions;
SPOOL off;
SET SQLFORMAT ansiconsole;
Ecco cosa ha fatto, riga per riga:
- La prima riga imposta
SQLFORMAT
ajson
. Ciò garantisce che il nostro risultato.json
il file contiene infatti JSON. In alternativa puoi usarejson-formatted
per emettere il JSON in un formato più umano (ne parleremo più avanti). - La seconda riga utilizza il
SPOOL
comando per specificare dove verrà scritto il file di output. Assicurati di modificare/Users/barney/data/regions.json
in una posizione sul tuo sistema e un nome file appropriato. - Sulla terza riga, ho eseguito la query SQL, i risultati per i quali sto esportando. In questo caso, ho esportato tutte le
regions
tabella. - Poi ho girato
SPOOL
spento. - Infine, ho impostato
SQLFORMAT
tornando alla mia impostazione originale, che eraansiconsole
. Questo è facoltativo:puoi lasciarlo sujson
se preferisci, o cambialo con qualcos'altro.
Ecco come appare il file risultante:
{"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.
Come accennato, hai anche la possibilità di utilizzare json-formatted
per produrre il JSON in un formato più adatto all'uomo, con rientri, ecc. Ne ho incluso un esempio in fondo a questo articolo.
Rimuovi feedback
Puoi rimuovere il 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;
Risultato:
{"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"} ]}]}
In questo caso ho girato FEEDBACK
riattivare dopo aver esportato il file.
Aggiungi i risultati
Per impostazione predefinita, SPOOL
utilizza REPLACE
, che sostituisce il file se esiste già.
Tuttavia, possiamo usare il APPEND
argomento per aggiungere i risultati al file.
Esempio:
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;
File risultante:
{"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"} ]}]}
Questo esempio ha aggiunto i risultati al file che è stato creato (e popolato) nell'esempio precedente. Ciò ha comportato la duplicazione dell'output della query nel file.
Sovrascrivi il file esistente
Possiamo usare REPLACE
per sovrascrivere il file esistente con i risultati di una nuova query:
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;
File risultante:
{"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"} ]}]}
Come accennato, REPLACE
è l'impostazione predefinita, quindi avremmo potuto semplicemente omettere del tutto questo argomento.
JSON formattato
In alternativa puoi usare json-formatted
per emettere il JSON in un formato più umano:
SET SQLFORMAT json-formatted;
SPOOL '/Users/barney/data/regions_formatted.json';
SELECT * FROM regions;
SPOOL off;
SET SQLFORMAT ansiconsole;
Risultato:
{ "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" } ] } ] }