sql >> Databasteknik >  >> RDS >> Oracle

Hur man exporterar Oracle-frågeresultat till en JSON-fil när du använder SQLcl

När du använder SQLcl med Oracle Database kan du exportera dina frågeresultat till en JSON-fil med SPOOL kommando.

Exempel

Här är ett exempel som exporterar en hel tabell:

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

Så här gjorde den rad för rad:

  • Den första raden anger SQLFORMAT till json . Detta säkerställer att vår resulterande .json filen innehåller faktiskt JSON. Du kan alternativt använda json-formatted för att mata ut JSON i ett mer mänskligt format (mer om detta senare).
  • Den andra raden använder SPOOL kommando för att ange var utdatafilen ska skrivas. Se till att ändra /Users/barney/data/regions.json till en plats på ditt system och ett lämpligt filnamn.
  • På den tredje raden körde jag SQL-frågan – resultaten för vilka jag exporterar. I det här fallet exporterade jag hela regions tabell.
  • Närnäst vände jag till SPOOL av.
  • Sistligen ställer jag in SQLFORMAT tillbaka till min ursprungliga inställning, som var ansiconsole . Detta är valfritt – du kan lämna det på json om du föredrar det, eller ändra det till något annat.

Så här ser den resulterande filen ut:

{"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ämnts har du också möjlighet att använda json-formatted för att mata ut JSON i ett mer människovänligt format, med indrag etc. Jag har inkluderat ett exempel på detta längst ner i den här artikeln.

Ta bort feedback

Du kan ta bort 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 det här fallet vände jag till FEEDBACK igen efter att ha exporterat filen.

Lägg till resultaten

Som standard, SPOOL använder REPLACE , som ersätter filen om den redan finns.

Däremot kan vi använda APPEND argument för att lägga till resultaten till filen.

Exempel:

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;

Resultatfil:

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

Det här exemplet bifogade resultaten till filen som skapades (och fylldes i) i föregående exempel. Detta resulterade i att frågeutgången duplicerades i filen.

Skriv över den befintliga filen

Vi kan använda REPLACE för att skriva över den befintliga filen med resultaten av en ny fråga:

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;

Resultatfil:

{"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ämnt, REPLACE är standardinställningen, så vi kunde helt enkelt ha utelämnat detta argument helt och hållet.

Formaterad JSON

Du kan alternativt använda json-formatted för att mata ut JSON i ett mer mänskligt 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. MySQL - Subtrahera värde från föregående rad, gruppera efter

  2. Hitta avståndet mellan två punkter med hjälp av latitud och longitud i mysql

  3. Exportera frågeresultat till en XML-fil när du använder SQLcl (Oracle)

  4. Behöver lista alla triggers i SQL Server-databasen med tabellnamn och tabellens schema