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
SQLFORMATajson. Ciò garantisce che il nostro risultato.jsonil file contiene infatti JSON. In alternativa puoi usarejson-formattedper emettere il JSON in un formato più umano (ne parleremo più avanti). - La seconda riga utilizza il
SPOOLcomando per specificare dove verrà scritto il file di output. Assicurati di modificare/Users/barney/data/regions.jsonin 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
regionstabella. - Poi ho girato
SPOOLspento. - Infine, ho impostato
SQLFORMATtornando alla mia impostazione originale, che eraansiconsole. Questo è facoltativo:puoi lasciarlo sujsonse 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"
}
]
}
]
}