Wanneer u SQLcl gebruikt met Oracle Database, kunt u uw queryresultaten exporteren naar een JSON-bestand met de SPOOL
commando.
Voorbeeld
Hier is een voorbeeld dat een hele tabel exporteert:
SET SQLFORMAT json;
SPOOL '/Users/barney/data/regions.json';
SELECT * FROM regions;
SPOOL off;
SET SQLFORMAT ansiconsole;
Dit is wat het deed, regel voor regel:
- De eerste regel stelt
SQLFORMAT
in naarjson
. Dit zorgt ervoor dat onze resulterende.json
bestand bevat inderdaad JSON. U kunt ookjson-formatted
. gebruiken om de JSON in een meer mensvriendelijk formaat uit te voeren (hierover later meer). - De tweede regel gebruikt de
SPOOL
commando om aan te geven waar het uitvoerbestand zal worden geschreven. Zorg ervoor dat u/Users/barney/data/regions.json
. wijzigt naar een locatie op uw systeem en een geschikte bestandsnaam. - Op de derde regel heb ik de SQL-query uitgevoerd - de resultaten waarvoor ik exporteer. In dit geval heb ik de hele
regions
geëxporteerd tafel. - Vervolgens draaide ik
SPOOL
uit. - Als laatste stel ik
SQLFORMAT
. in terug naar mijn oorspronkelijke instelling, namelijkansiconsole
. Dit is optioneel – u kunt het achterlaten opjson
als je wilt, of verander het in iets anders.
Zo ziet het resulterende bestand eruit:
{"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.
Zoals vermeld, heb je ook de mogelijkheid om json-formatted
. te gebruiken om de JSON in een mensvriendelijker formaat uit te voeren, met inspringingen, enz. Ik heb een voorbeeld hiervan onderaan dit artikel opgenomen.
Feedback verwijderen
U kunt de X rows selected
met 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;
Resultaat:
{"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 dit geval draaide ik FEEDBACK
weer aan na het exporteren van het bestand.
Voeg de resultaten toe
Standaard SPOOL
gebruikt REPLACE
, die het bestand vervangt als het al bestaat.
We kunnen echter de APPEND
. gebruiken argument om de resultaten aan het bestand toe te voegen.
Voorbeeld:
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;
Resulterend bestand:
{"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"} ]}]}
In dit voorbeeld zijn de resultaten toegevoegd aan het bestand dat in het vorige voorbeeld is gemaakt (en ingevuld). Dit leidde ertoe dat de uitvoer van de zoekopdracht in het bestand werd gedupliceerd.
Het bestaande bestand overschrijven
We kunnen REPLACE
. gebruiken om het bestaande bestand te overschrijven met de resultaten van een nieuwe zoekopdracht:
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;
Resulterend bestand:
{"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"} ]}]}
Zoals vermeld, REPLACE
is de standaardinstelling, dus we hadden dit argument gewoon helemaal kunnen weglaten.
Geformatteerde JSON
U kunt ook json-formatted
. gebruiken om de JSON in een meer mensvriendelijk formaat uit te voeren:
SET SQLFORMAT json-formatted;
SPOOL '/Users/barney/data/regions_formatted.json';
SELECT * FROM regions;
SPOOL off;
SET SQLFORMAT ansiconsole;
Resultaat:
{ "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" } ] } ] }