Когато използвате 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" } ] } ] }