Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Cara Mengekspor Hasil Permintaan Oracle ke File JSON saat menggunakan SQLcl

Saat menggunakan SQLcl dengan Oracle Database, Anda dapat mengekspor hasil kueri ke file JSON dengan SPOOL perintah.

Contoh

Berikut ini contoh yang mengekspor seluruh tabel:

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

Inilah yang dilakukannya, baris demi baris:

  • Baris pertama menetapkan SQLFORMAT ke json . Ini memastikan bahwa hasil .json file sebenarnya mengandung JSON. Sebagai alternatif, Anda dapat menggunakan json-formatted untuk menampilkan JSON dalam format yang lebih ramah manusia (lebih lanjut tentang ini nanti).
  • Baris kedua menggunakan SPOOL perintah untuk menentukan di mana file output akan ditulis. Pastikan untuk mengubah /Users/barney/data/regions.json ke lokasi di sistem Anda, dan nama file yang sesuai.
  • Pada baris ketiga, saya menjalankan kueri SQL – hasil yang saya ekspor. Dalam hal ini, saya mengekspor seluruh regions meja.
  • Selanjutnya, saya mengubah SPOOL mati.
  • Terakhir, saya mengatur SQLFORMAT kembali ke pengaturan awal saya, yaitu ansiconsole . Ini opsional – Anda dapat membiarkannya di json jika Anda mau, atau ubah ke yang lain.

Berikut tampilan file yang dihasilkan:

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

Seperti yang disebutkan, Anda juga memiliki opsi untuk menggunakan json-formatted untuk menampilkan JSON dalam format yang lebih ramah manusia, dengan indentasi, dll. Saya telah menyertakan contohnya di bagian bawah artikel ini.

Hapus Masukan

Anda dapat menghapus X rows selected dengan 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;

Hasil:

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

Dalam hal ini saya mengubah FEEDBACK hidupkan kembali setelah mengekspor file.

Tambahkan Hasil

Secara default, SPOOL menggunakan REPLACE , yang menggantikan file jika sudah ada.

Namun, kita dapat menggunakan APPEND argumen untuk menambahkan hasil ke file.

Contoh:

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;

File yang dihasilkan:

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

Contoh ini menambahkan hasil ke file yang dibuat (dan diisi) pada contoh sebelumnya. Hal ini mengakibatkan keluaran kueri diduplikasi dalam file.

Timpa File yang Ada

Kita dapat menggunakan REPLACE untuk menimpa file yang ada dengan hasil kueri baru:

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;

File yang dihasilkan:

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

Seperti yang disebutkan, REPLACE adalah pengaturan default, jadi kita bisa saja mengabaikan argumen ini sama sekali.

JSON yang diformat

Sebagai alternatif, Anda dapat menggunakan json-formatted untuk menampilkan JSON dalam format yang lebih ramah manusia:

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

Hasil:

{
  "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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dua kunci asing, bukan kunci utama

  2. Bagaimana cara memilih 1 teratas dan diurutkan berdasarkan tanggal di Oracle SQL?

  3. Bagaimana menangani detik kabisat di Oracle

  4. Kesalahan ORA-12514 setelah memulai ulang server

  5. Oracle:mengekspor tabel dengan gumpalan ke file .sql yang dapat diimpor lagi