sql >> Database teknologi >  >> RDS >> Oracle

Sådan eksporteres Oracle-forespørgselsresultater til en JSON-fil, når du bruger SQLcl

Når du bruger SQLcl med Oracle Database, kan du eksportere dine forespørgselsresultater til en JSON-fil med SPOOL kommando.

Eksempel

Her er et eksempel, der eksporterer en hel tabel:

SET SQLFORMAT json;
SPOOL '/Users/barney/data/regions.json';
SELECT * FROM regions;
SPOOL off;
SET SQLFORMAT ansiconsole;

Her er, hvad det gjorde, linje for linje:

  • Den første linje sætter SQLFORMAT til json . Dette sikrer, at vores resulterende .json filen indeholder faktisk JSON. Du kan alternativt bruge json-formatted at outputte JSON i et mere menneskevenligt format (mere om dette senere).
  • Den anden linje bruger SPOOL kommando for at angive, hvor outputfilen skal skrives. Sørg for at ændre /Users/barney/data/regions.json til en placering på dit system og et passende filnavn.
  • På den tredje linje kørte jeg SQL-forespørgslen – de resultater, som jeg eksporterer for. I dette tilfælde eksporterede jeg hele regions tabel.
  • Dernæst vendte jeg SPOOL slukket.
  • Til sidst indstillede jeg SQLFORMAT tilbage til min oprindelige indstilling, som var ansiconsole . Dette er valgfrit – du kan efterlade det på json hvis du foretrækker det, eller ændre det til noget andet.

Sådan ser den resulterende fil ud:

{"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. 

Som nævnt har du også mulighed for at bruge json-formatted at udskrive JSON i et mere menneskevenligt format, med indrykninger osv. Jeg har inkluderet et eksempel på dette nederst i denne artikel.

Fjern feedback

Du kan fjerne X rows selected med 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;

Resultat:

{"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"}
]}]}

I dette tilfælde har jeg slået FEEDBACK igen efter eksport af filen.

Tilføj resultaterne

Som standard er SPOOL bruger REPLACE , som erstatter filen, hvis den allerede eksisterer.

Vi kan dog bruge koden APPEND argument for at tilføje resultaterne til filen.

Eksempel:

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;

Resulterende fil:

{"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"}
]}]}

Dette eksempel føjede resultaterne til den fil, der blev oprettet (og udfyldt) i det forrige eksempel. Dette resulterede i, at forespørgselsoutputtet blev duplikeret i filen.

Overskriv den eksisterende fil

Vi kan bruge REPLACE for at overskrive den eksisterende fil med resultaterne af en ny forespørgsel:

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;

Resulterende fil:

{"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"}
]}]}

Som nævnt REPLACE er standardindstillingen, så vi kunne simpelthen have udeladt dette argument helt.

Formateret JSON

Du kan alternativt bruge json-formatted for at udlæse JSON i et mere menneskevenligt format:

SET SQLFORMAT json-formatted;
SPOOL '/Users/barney/data/regions_formatted.json';
SELECT * FROM regions;
SPOOL off;
SET SQLFORMAT ansiconsole;

Resultat:

{
  "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"
        }
      ]
    }
  ]
}

  1. Apache Spark ODBC-driver

  2. Er Oracles SYS_GUID() UUID RFC 4122 kompatibel?

  3. SQL Server-triggere:DML-triggere

  4. Hvordan laver jeg en rækkegenerator i MySQL?