Wenn Sie SQLcl mit Oracle Database verwenden, können Sie Ihre Abfrageergebnisse mit dem SPOOL in eine JSON-Datei exportieren Befehl.
Beispiel
Hier ist ein Beispiel, das eine ganze Tabelle exportiert:
SET SQLFORMAT json;
SPOOL '/Users/barney/data/regions.json';
SELECT * FROM regions;
SPOOL off;
SET SQLFORMAT ansiconsole; Hier ist, was es getan hat, Zeile für Zeile:
- Die erste Zeile setzt
SQLFORMATzujson. Dadurch wird sichergestellt, dass unsere resultierende.jsonDatei enthält tatsächlich JSON. Alternativ können Siejson-formattedverwenden um JSON in einem menschenfreundlicheren Format auszugeben (dazu später mehr). - Die zweite Zeile verwendet den
SPOOLBefehl, um anzugeben, wohin die Ausgabedatei geschrieben werden soll. Achten Sie darauf,/Users/barney/data/regions.jsonzu ändern an einen Speicherort auf Ihrem System und einen entsprechenden Dateinamen. - In der dritten Zeile habe ich die SQL-Abfrage ausgeführt – die Ergebnisse, für die ich exportiere. In diesem Fall habe ich die gesamten
regionsexportiert Tabelle. - Als nächstes drehte ich
SPOOLaus. - Zuletzt setze ich
SQLFORMATzurück zu meiner ursprünglichen Einstellung, dieansiconsolewar . Dies ist optional – Sie können es beijsonbelassen wenn Sie es vorziehen, oder ändern Sie es in etwas anderes.
So sieht die resultierende Datei aus:
{"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.
Wie erwähnt, haben Sie auch die Möglichkeit, json-formatted zu verwenden um JSON in einem menschenfreundlicheren Format auszugeben, mit Einzügen usw. Ich habe ein Beispiel dafür am Ende dieses Artikels eingefügt.
Feedback entfernen
Sie können das X rows selected mit 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; Ergebnis:
{"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"}
]}]}
In diesem Fall habe ich mich an FEEDBACK gewandt nach dem Exportieren der Datei wieder einschalten.
Fügen Sie die Ergebnisse hinzu
Standardmäßig SPOOL verwendet REPLACE , die die Datei ersetzt, falls sie bereits vorhanden ist.
Wir können jedoch das APPEND verwenden Argument, um die Ergebnisse an die Datei anzuhängen.
Beispiel:
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; Ergebnisdatei:
{"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"}
]}]}
In diesem Beispiel wurden die Ergebnisse an die Datei angehängt, die im vorherigen Beispiel erstellt (und gefüllt) wurde. Dies führte dazu, dass die Abfrageausgabe in der Datei dupliziert wurde.
Bestehende Datei überschreiben
Wir können REPLACE verwenden um die vorhandene Datei mit den Ergebnissen einer neuen Abfrage zu überschreiben:
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; Ergebnisdatei:
{"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"}
]}]}
Wie bereits erwähnt, REPLACE ist die Standardeinstellung, also hätten wir dieses Argument einfach ganz weglassen können.
Formatiertes JSON
Sie können alternativ json-formatted verwenden um JSON in einem menschenfreundlicheren Format auszugeben:
SET SQLFORMAT json-formatted;
SPOOL '/Users/barney/data/regions_formatted.json';
SELECT * FROM regions;
SPOOL off;
SET SQLFORMAT ansiconsole; Ergebnis:
{
"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"
}
]
}
]
}