Při použití SQLcl s databází Oracle můžete exportovat výsledky dotazu do souboru JSON pomocí SPOOL
příkaz.
Příklad
Zde je příklad exportu celé tabulky:
SET SQLFORMAT json;
SPOOL '/Users/barney/data/regions.json';
SELECT * FROM regions;
SPOOL off;
SET SQLFORMAT ansiconsole;
Tady je to, co to udělalo, řádek po řádku:
- První řádek nastavuje
SQLFORMAT
dojson
. Tím je zajištěno, že výsledný.json
soubor ve skutečnosti obsahuje JSON. Alternativně můžete použítjson-formatted
pro výstup JSON ve formátu přívětivějším pro člověka (více o tom později). - Druhý řádek používá
SPOOL
příkaz k určení, kam bude výstupní soubor zapsán. Nezapomeňte změnit/Users/barney/data/regions.json
do umístění ve vašem systému a odpovídající název souboru. - Na třetím řádku jsem spustil SQL dotaz – výsledky, pro které exportuji. V tomto případě jsem exportoval celé
regions
stůl. - Dále jsem zapnul
SPOOL
vypnuto. - Nakonec jsem nastavil
SQLFORMAT
zpět k mému původnímu nastavení, což byloansiconsole
. Toto je volitelné – můžete to nechat najson
pokud chcete, nebo to změňte na něco jiného.
Takto vypadá výsledný soubor:
{"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.
Jak již bylo zmíněno, máte také možnost použít json-formatted
pro výstup JSON ve formátu, který je pro člověka přívětivější, s odsazením atd. Příklad jsem uvedl na konci tohoto článku.
Odebrat zpětnou vazbu
Můžete odstranit X rows selected
s 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;
Výsledek:
{"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"} ]}]}
V tomto případě jsem otočil FEEDBACK
zpět po exportu souboru.
Připojit výsledky
Ve výchozím nastavení SPOOL
používá REPLACE
, který nahradí soubor, pokud již existuje.
Můžeme však použít APPEND
argument pro připojení výsledků k souboru.
Příklad:
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;
Výsledný soubor:
{"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"} ]}]}
Tento příklad připojil výsledky k souboru, který byl vytvořen (a naplněn) v předchozím příkladu. Výsledkem bylo duplikování výstupu dotazu v souboru.
Přepsat existující soubor
Můžeme použít REPLACE
pro přepsání existujícího souboru výsledky nového dotazu:
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;
Výsledný soubor:
{"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"} ]}]}
Jak již bylo zmíněno, REPLACE
je výchozí nastavení, takže jsme tento argument mohli jednoduše vynechat.
Formátovaný JSON
Alternativně můžete použít json-formatted
pro výstup JSON ve formátu přívětivějším pro člověka:
SET SQLFORMAT json-formatted;
SPOOL '/Users/barney/data/regions_formatted.json';
SELECT * FROM regions;
SPOOL off;
SET SQLFORMAT ansiconsole;
Výsledek:
{ "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" } ] } ] }