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 kueriJSON_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
– Mengembalikanliteral
ketika tidak ada kecocokan yang ditemukan. Tipe dataliteral
harus cocok dengan tipe data dari nilai yang dikembalikan oleh fungsi ini.
Lihat dokumentasi Oracle untuk informasi lebih lanjut tentang JSON_TABLE()
fungsi.