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
SQLFORMATdojson. Tím je zajištěno, že výsledný.jsonsoubor ve skutečnosti obsahuje JSON. Alternativně můžete použítjson-formattedpro výstup JSON ve formátu přívětivějším pro člověka (více o tom později). - Druhý řádek používá
SPOOLpříkaz k určení, kam bude výstupní soubor zapsán. Nezapomeňte změnit/Users/barney/data/regions.jsondo 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é
regionsstůl. - Dále jsem zapnul
SPOOLvypnuto. - Nakonec jsem nastavil
SQLFORMATzpět k mému původnímu nastavení, což byloansiconsole. Toto je volitelné – můžete to nechat najsonpokud 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"
}
]
}
]
}