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
SQLFORMATdojson-formatted. Gwarantuje to, że nasz wynikowy.jsonplik faktycznie zawiera JSON. Możesz alternatywnie użyćjson-formattedaby wyprowadzić JSON w formacie bardziej przyjaznym dla człowieka (więcej o tym później). - Druga linia używa
SPOOLpolecenie, aby określić, gdzie zostanie zapisany plik wyjściowy. Pamiętaj, aby zmienić/Users/barney/data/regions.jsondo 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
regionsstół. - Następnie zmieniłem
SPOOLwyłączony. - Na koniec ustawiłem
SQLFORMATz powrotem do mojego pierwotnego ustawienia, którym byłoansiconsole. Jest to opcjonalne – możesz zostawić go wjson-formattedjeś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"
}
]
}
]
}