Når du bruger SQLcl med Oracle Database, kan du eksportere dine forespørgselsresultater til en JSON-fil med SPOOL
kommando.
Eksempel
Her er et eksempel, der eksporterer en hel tabel:
SET SQLFORMAT json;
SPOOL '/Users/barney/data/regions.json';
SELECT * FROM regions;
SPOOL off;
SET SQLFORMAT ansiconsole;
Her er, hvad det gjorde, linje for linje:
- Den første linje sætter
SQLFORMAT
tiljson
. Dette sikrer, at vores resulterende.json
filen indeholder faktisk JSON. Du kan alternativt brugejson-formatted
at outputte JSON i et mere menneskevenligt format (mere om dette senere). - Den anden linje bruger
SPOOL
kommando for at angive, hvor outputfilen skal skrives. Sørg for at ændre/Users/barney/data/regions.json
til en placering på dit system og et passende filnavn. - På den tredje linje kørte jeg SQL-forespørgslen – de resultater, som jeg eksporterer for. I dette tilfælde eksporterede jeg hele
regions
tabel. - Dernæst vendte jeg
SPOOL
slukket. - Til sidst indstillede jeg
SQLFORMAT
tilbage til min oprindelige indstilling, som varansiconsole
. Dette er valgfrit – du kan efterlade det påjson
hvis du foretrækker det, eller ændre det til noget andet.
Sådan ser den resulterende fil ud:
{"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.
Som nævnt har du også mulighed for at bruge json-formatted
at udskrive JSON i et mere menneskevenligt format, med indrykninger osv. Jeg har inkluderet et eksempel på dette nederst i denne artikel.
Fjern feedback
Du kan fjerne X rows selected
med 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;
Resultat:
{"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"} ]}]}
I dette tilfælde har jeg slået FEEDBACK
igen efter eksport af filen.
Tilføj resultaterne
Som standard er SPOOL
bruger REPLACE
, som erstatter filen, hvis den allerede eksisterer.
Vi kan dog bruge koden APPEND
argument for at tilføje resultaterne til filen.
Eksempel:
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;
Resulterende fil:
{"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"} ]}]}
Dette eksempel føjede resultaterne til den fil, der blev oprettet (og udfyldt) i det forrige eksempel. Dette resulterede i, at forespørgselsoutputtet blev duplikeret i filen.
Overskriv den eksisterende fil
Vi kan bruge REPLACE
for at overskrive den eksisterende fil med resultaterne af en ny forespørgsel:
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;
Resulterende fil:
{"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"} ]}]}
Som nævnt REPLACE
er standardindstillingen, så vi kunne simpelthen have udeladt dette argument helt.
Formateret JSON
Du kan alternativt bruge json-formatted
for at udlæse JSON i et mere menneskevenligt format:
SET SQLFORMAT json-formatted;
SPOOL '/Users/barney/data/regions_formatted.json';
SELECT * FROM regions;
SPOOL off;
SET SQLFORMAT ansiconsole;
Resultat:
{ "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" } ] } ] }