Когато използвате SQLcl с Oracle Database, можете да експортирате резултатите от заявката си в JSON файл с SPOOL команда.
Пример
Ето пример, който експортира цяла таблица:
SET SQLFORMAT json;
SPOOL '/Users/barney/data/regions.json';
SELECT * FROM regions;
SPOOL off;
SET SQLFORMAT ansiconsole; Ето какво направи, ред по ред:
- Първият ред задава
SQLFORMATкъмjson. Това гарантира, че нашият резултат.jsonфайлът всъщност съдържа JSON. Като алтернатива можете да използватеjson-formattedза да изведете JSON в по-удобен за хората формат (повече за това по-късно). - Вторият ред използва
SPOOLкоманда, за да посочите къде ще бъде записан изходният файл. Не забравяйте да промените/Users/barney/data/regions.jsonдо местоположение във вашата система и подходящо име на файл. - На третия ред изпълних SQL заявката – резултатите, за които експортирам. В този случай експортирах целите
regionsмаса. - След това обърнах
SPOOLизключено. - Накрая зададох
SQLFORMATобратно към първоначалната ми настройка, която бешеansiconsole. Това е по избор – можете да го оставите наjsonако предпочитате, или го променете с нещо друго.
Ето как изглежда полученият файл:
{"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.
Както споменахме, вие също имате възможност да използвате json-formatted за да изведете JSON в по-удобен за хората формат, с отстъпи и т.н. Включих пример за това в края на тази статия.
Премахване на обратна връзка
Можете да премахнете X rows selected с изключен 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; Резултат:
{"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"}
]}]}
В този случай обърнах FEEDBACK отново след експортиране на файла.
Добавяне на резултатите
По подразбиране SPOOL използва REPLACE , който замества файла, ако вече съществува.
Въпреки това можем да използваме APPEND аргумент за добавяне на резултатите към файла.
Пример:
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; Резултатен файл:
{"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"}
]}]}
Този пример добави резултатите към файла, който беше създаден (и попълнен) в предишния пример. Това доведе до дублиране на изхода на заявката във файла.
Презаписване на съществуващия файл
Можем да използваме REPLACE за да презапишете съществуващия файл с резултатите от нова заявка:
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; Резултатен файл:
{"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"}
]}]}
Както бе споменато, REPLACE е настройката по подразбиране, така че бихме могли просто да пропуснем този аргумент напълно.
Форматиран JSON
Като алтернатива можете да използвате json-formatted за да изведете JSON в по-удобен за хората формат:
SET SQLFORMAT json-formatted;
SPOOL '/Users/barney/data/regions_formatted.json';
SELECT * FROM regions;
SPOOL off;
SET SQLFORMAT ansiconsole; Резултат:
{
"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"
}
]
}
]
}