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
SQLFORMATtilljson. Detta säkerställer att vår resulterande.jsonfilen innehåller faktiskt JSON. Du kan alternativt användajson-formattedför att mata ut JSON i ett mer mänskligt format (mer om detta senare). - Den andra raden använder
SPOOLkommando för att ange var utdatafilen ska skrivas. Se till att ändra/Users/barney/data/regions.jsontill 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
regionstabell. - Närnäst vände jag till
SPOOLav. - Sistligen ställer jag in
SQLFORMATtillbaka till min ursprungliga inställning, som varansiconsole. Detta är valfritt – du kan lämna det påjsonom 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"
}
]
}
]
}