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:
expradalah dokumen JSON yang ingin Anda kueriJSON_basic_path_expressionadalah ekspresi jalur SQL/JSON.JSON_query_on_error_clausemenentukan nilai yang dikembalikan ketika kesalahan tertentu terjadi.JSON_query_on_empty_clausemenentukan nilai yang dikembalikan jika tidak ditemukan kecocokan.JSON_columns_clausemendefinisikan 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:
NULLONEMPTY– Mengembalikan null saat tidak ditemukan kecocokan.ERRORONEMPTY– Mengembalikan kesalahan Oracle yang sesuai saat tidak ditemukan kecocokan.DEFAULTliteralONEMPTY– Mengembalikanliteralketika tidak ada kecocokan yang ditemukan. Tipe dataliteralharus cocok dengan tipe data dari nilai yang dikembalikan oleh fungsi ini.
Lihat dokumentasi Oracle untuk informasi lebih lanjut tentang JSON_TABLE() fungsi.