Używając SQLcl z bazą danych Oracle, możesz wyeksportować wyniki zapytania do pliku JSON z SPOOL
polecenie.
Przykład
Oto przykład, który eksportuje całą tabelę:
SET SQLFORMAT json;
SPOOL '/Users/barney/data/regions.json';
SELECT * FROM regions;
SPOOL off;
SET SQLFORMAT ansiconsole;
Oto, co zrobił, linia po linii:
- Pierwszy wiersz ustawia
SQLFORMAT
dojson-formatted
. Gwarantuje to, że nasz wynikowy.json
plik faktycznie zawiera JSON. Możesz alternatywnie użyćjson-formatted
aby wyprowadzić JSON w formacie bardziej przyjaznym dla człowieka (więcej o tym później). - Druga linia używa
SPOOL
polecenie, aby określić, gdzie zostanie zapisany plik wyjściowy. Pamiętaj, aby zmienić/Users/barney/data/regions.json
do lokalizacji w systemie i odpowiedniej nazwy pliku. - W trzecim wierszu uruchomiłem zapytanie SQL – wyniki, dla których eksportuję. W tym przypadku wyeksportowałem całe
regions
stół. - Następnie zmieniłem
SPOOL
wyłączony. - Na koniec ustawiłem
SQLFORMAT
z powrotem do mojego pierwotnego ustawienia, którym byłoansiconsole
. Jest to opcjonalne – możesz zostawić go wjson-formatted
jeśli wolisz, lub zmień to na coś innego.
Oto jak wygląda wynikowy plik:
{"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 wspomniano, masz również możliwość korzystania z formatu json-formatted
aby wyprowadzić JSON w bardziej przyjaznym dla człowieka formacie, z wcięciami itp. Przykład tego podałem na dole tego artykułu.
Usuń opinię
Możesz usunąć X rows selected
z 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;
Wynik:
{"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"} ]}]}
W tym przypadku włączyłem FEEDBACK
ponownie po wyeksportowaniu pliku.
Dołącz wyniki
Domyślnie SPOOL
używa REPLACE
, który zastępuje plik, jeśli już istnieje.
Możemy jednak użyć APPEND
argument, aby dołączyć wyniki do pliku.
Przykład:
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;
Wynikowy plik:
{"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"} ]}]}
Ten przykład dołączył wyniki do pliku, który został utworzony (i wypełniony) w poprzednim przykładzie. Spowodowało to zduplikowanie wyników zapytania w pliku.
Zastąp istniejący plik
Możemy użyć REPLACE
aby nadpisać istniejący plik wynikami nowego zapytania:
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;
Wynikowy plik:
{"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 wspomniano, REPLACE
jest ustawieniem domyślnym, więc mogliśmy po prostu całkowicie pominąć ten argument.
Sformatowany JSON
Możesz alternatywnie użyć json-formatted
aby wyprowadzić JSON w formacie bardziej przyjaznym dla człowieka:
SET SQLFORMAT json-formatted;
SPOOL '/Users/barney/data/regions_formatted.json';
SELECT * FROM regions;
SPOOL off;
SET SQLFORMAT ansiconsole;
Wynik:
{ "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" } ] } ] }