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
SQLFORMATtiljson. Dette sikrer, at vores resulterende.jsonfilen indeholder faktisk JSON. Du kan alternativt brugejson-formattedat outputte JSON i et mere menneskevenligt format (mere om dette senere). - Den anden linje bruger
SPOOLkommando for at angive, hvor outputfilen skal skrives. Sørg for at ændre/Users/barney/data/regions.jsontil 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
regionstabel. - Dernæst vendte jeg
SPOOLslukket. - Til sidst indstillede jeg
SQLFORMATtilbage til min oprindelige indstilling, som varansiconsole. Dette er valgfrit – du kan efterlade det påjsonhvis 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"
}
]
}
]
}