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

Fungsi JSON_TABLE() di Oracle

Di Oracle Database, JSON_TABLE() fungsi membuat tampilan relasional data JSON. Ini memungkinkan Anda untuk menyajikan nilai dalam dokumen JSON dalam format tabel – sebagai baris dan kolom.

Sintaks

Sintaksnya seperti ini:

JSON_TABLE
  ( expr [ FORMAT JSON ] [ , JSON_basic_path_expression ]
    [ JSON_table_on_error_clause ] [ JSON_table_on_empty_clause ] 
    JSON_columns_clause )

Dimana:

  • expr adalah dokumen JSON yang ingin Anda kueri
  • JSON_basic_path_expression adalah ekspresi jalur SQL/JSON.
  • JSON_query_on_error_clause menentukan nilai yang dikembalikan ketika kesalahan tertentu terjadi.
  • JSON_query_on_empty_clause menentukan nilai yang dikembalikan jika tidak ditemukan kecocokan.
  • JSON_columns_clause mendefinisikan kolom dalam tabel relasional virtual yang dikembalikan oleh fungsi.

JSON_TABLE() fungsi hanya dapat digunakan di FROM klausa dari SELECT pernyataan.

Contoh

Berikut ini contoh untuk mendemonstrasikan cara kerjanya:

SELECT *
FROM JSON_TABLE('{a:1, b:2, c:3}', '$' COLUMNS(a, b, c));

Hasil:

   A    B    C 
____ ____ ____ 
1    2    3    

Ini dia dengan sedikit lebih banyak data:

SELECT *
FROM JSON_TABLE(
    '[{a:1, b:2, c:3}, {a:4, b:5, c:6}, {a:7, b:8, c:9}]', 
    '$[*]' 
    COLUMNS(a, b, c)
    );

Hasil:

   A    B    C 
____ ____ ____ 
1    2    3    
4    5    6    
7    8    9   

Lebih Sedikit Kolom

Inilah yang terjadi jika kita mengurangi jumlah kolom yang ditentukan dalam COLUMNS klausa:

SELECT *
FROM JSON_TABLE(
    '[{a:1, b:2, c:3}, {a:4, b:5, c:6}, {a:7, b:8, c:9}]', 
    '$[*]' 
    COLUMNS(a, b)
    );

Hasil:

   A    B 
____ ____ 
1    2    
4    5    
7    8    

Kita dapat mencapai hasil yang sama dengan menentukan kolom yang dipilih di SELECT daftar:

SELECT a, b
FROM JSON_TABLE(
    '[{a:1, b:2, c:3}, {a:4, b:5, c:6}, {a:7, b:8, c:9}]', 
    '$[*]' 
    COLUMNS(a, b, c)
    );

Hasil:

   A    B 
____ ____ 
1    2    
4    5    
7    8    

Pilih Baris Tertentu

Kita dapat menggunakan klausa seperti WHERE untuk memilih hanya baris yang memenuhi kriteria tertentu:

SELECT *
FROM JSON_TABLE(
    '[{a:1, b:2, c:3}, {a:4, b:5, c:6}, {a:7, b:8, c:9}]', 
    '$[*]' 
    COLUMNS(a, b, c)
    )
WHERE b = 5;

Hasil:

   A    B    C 
____ ____ ____ 
4    5    6    

Penanganan Kesalahan

Kita dapat menggunakan klausa berikut untuk menangani kesalahan:

  • NULL ON ERROR
    • Jika inputnya bukan JSON dengan format yang baik, tidak ada lagi baris yang dikembalikan dari titik di mana kesalahan terdeteksi.
    • Jika tidak ada kecocokan yang ditemukan saat ekspresi jalur baris dievaluasi, tidak ada baris yang dikembalikan.
    • Menyetel perilaku kesalahan default untuk semua ekspresi kolom ke NULL ON ERROR
  • ERROR ON ERROR
    • Jika input JSON tidak berbentuk baik, kesalahan akan muncul.
    • Jika tidak ada kecocokan yang ditemukan saat ekspresi jalur baris dievaluasi, kesalahan akan muncul
    • Menyetel perilaku kesalahan default untuk semua ekspresi kolom ke ERROR ON ERROR

Berikut ini contoh NULL ON ERROR :

SELECT *
FROM JSON_TABLE(
    '[{a:1, b:2, c:3}, {a:4, b:5, c:6}, a:7, b:8, c:9]', 
    '$[*]'
    NULL ON ERROR
    COLUMNS(a, b, c)
    );

Hasil:

   A    B    C 
____ ____ ____ 
1    2    3    
4    5    6    

Karena JSON_TABLE() fungsi mendukung evaluasi streaming, baris dapat dikembalikan sebelum menemukan bagian input dengan kesalahan. Itulah tepatnya yang dapat kita lihat dengan contoh ini – kita mendapatkan dua baris pertama, tetapi bukan baris ketiga (karena bagian dari JSON tersebut bukan merupakan JSON yang terbentuk dengan baik).

Ini dia dengan ERROR ON ERROR klausa:

SELECT *
FROM JSON_TABLE(
    '[{a:1, b:2, c:3}, {a:4, b:5, c:6}, a:7, b:8, c:9]', 
    '$[*]'
    ERROR ON ERROR
    COLUMNS(a, b, c)
    );

Hasil:

Error report -
ORA-40441: JSON syntax error

Menangani Hasil Kosong

Anda juga dapat menggunakan klausa untuk menentukan nilai yang dikembalikan jika tidak ditemukan kecocokan. Klausa ini memungkinkan Anda untuk menentukan hasil yang berbeda untuk jenis kesalahan ini daripada hasil yang ditentukan dengan klausa kesalahan.

Klausa tersebut adalah:

  • NULL ON EMPTY – Mengembalikan null saat tidak ditemukan kecocokan.
  • ERROR ON EMPTY – Mengembalikan kesalahan Oracle yang sesuai saat tidak ditemukan kecocokan.
  • DEFAULT literal ON EMPTY – Mengembalikan literal ketika tidak ada kecocokan yang ditemukan. Tipe data literal harus cocok dengan tipe data dari nilai yang dikembalikan oleh fungsi ini.

Lihat dokumentasi Oracle untuk informasi lebih lanjut tentang JSON_TABLE() fungsi.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pembuatan tabel dan penyisipan dalam prosedur yang sama di pl/sql

  2. Penyedia ADO.NET 'Oracle.ManagedDataAccess.Client' tidak terdaftar di file konfigurasi mesin atau aplikasi, atau tidak dapat dimuat

  3. Tidak ada lagi SPU

  4. Pemantauan SQL di Pengembang SQL

  5. secara terprogram memeriksa koneksi terbuka di JDBC