När du använder SQLcl med Oracle Database kan du exportera dina frågeresultat till en JSON-fil med SPOOL
kommando.
Exempel
Här är ett exempel som exporterar en hel tabell:
SET SQLFORMAT json;
SPOOL '/Users/barney/data/regions.json';
SELECT * FROM regions;
SPOOL off;
SET SQLFORMAT ansiconsole;
Så här gjorde den rad för rad:
- Den första raden anger
SQLFORMAT
tilljson
. Detta säkerställer att vår resulterande.json
filen innehåller faktiskt JSON. Du kan alternativt användajson-formatted
för att mata ut JSON i ett mer mänskligt format (mer om detta senare). - Den andra raden använder
SPOOL
kommando för att ange var utdatafilen ska skrivas. Se till att ändra/Users/barney/data/regions.json
till en plats på ditt system och ett lämpligt filnamn. - På den tredje raden körde jag SQL-frågan – resultaten för vilka jag exporterar. I det här fallet exporterade jag hela
regions
tabell. - Närnäst vände jag till
SPOOL
av. - Sistligen ställer jag in
SQLFORMAT
tillbaka till min ursprungliga inställning, som varansiconsole
. Detta är valfritt – du kan lämna det påjson
om du föredrar det, eller ändra det till något annat.
Så här ser den resulterande filen ut:
{"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ämnts har du också möjlighet att använda json-formatted
för att mata ut JSON i ett mer människovänligt format, med indrag etc. Jag har inkluderat ett exempel på detta längst ner i den här artikeln.
Ta bort feedback
Du kan ta bort 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 det här fallet vände jag till FEEDBACK
igen efter att ha exporterat filen.
Lägg till resultaten
Som standard, SPOOL
använder REPLACE
, som ersätter filen om den redan finns.
Däremot kan vi använda APPEND
argument för att lägga till resultaten till filen.
Exempel:
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;
Resultatfil:
{"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"} ]}]}
Det här exemplet bifogade resultaten till filen som skapades (och fylldes i) i föregående exempel. Detta resulterade i att frågeutgången duplicerades i filen.
Skriv över den befintliga filen
Vi kan använda REPLACE
för att skriva över den befintliga filen med resultaten av en ny fråga:
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;
Resultatfil:
{"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ämnt, REPLACE
är standardinställningen, så vi kunde helt enkelt ha utelämnat detta argument helt och hållet.
Formaterad JSON
Du kan alternativt använda json-formatted
för att mata ut JSON i ett mer mänskligt 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" } ] } ] }