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

JSON_VALUE() Fungsi di Oracle

Di Oracle Database, JSON_VALUE() function menemukan nilai JSON skalar yang ditentukan dalam data JSON dan mengembalikannya sebagai nilai SQL.

Sintaks

Sintaksnya seperti ini:

JSON_VALUE
  ( expr [ FORMAT JSON ], JSON_basic_path_expression
    [ JSON_value_returning_clause ] [ JSON_value_on_error_clause ]
    [ JSON_value_on_empty_clause ][ JSON_value_on_mismatch_clause ]
  )

Dimana:

  • expr adalah dokumen JSON yang ingin Anda kueri
  • JSON_basic_path_expression adalah ekspresi jalur SQL/JSON. Ekspresi jalur ini digunakan untuk mengevaluasi expr dan temukan nilai JSON skalar yang cocok, atau memenuhi, ekspresi jalur.
  • JSON_query_returning_clause menentukan tipe data dan format nilai yang dikembalikan oleh fungsi.
  • JSON_query_on_error_clause menentukan nilai yang dikembalikan ketika kesalahan tertentu terjadi.
  • JSON_query_on_empty_clause menentukan nilai yang ditampilkan jika tidak ada kecocokan yang ditemukan saat data JSON dievaluasi menggunakan ekspresi jalur SQL/JSON.
  • JSON_value_on_mismatch_clause dapat digunakan untuk menentukan abaikan, kesalahan, atau nol untuk kasus kesalahan seperti data tambahan, data yang hilang, dan kesalahan jenis. Ini dapat diterapkan secara umum, atau kasus per kasus.

Lihat dokumentasi Oracle untuk penjelasan rinci tentang klausa opsional.

Contoh

Berikut adalah contoh untuk mendemonstrasikan bagaimana JSON_VALUE() fungsi berfungsi:

SELECT 
    JSON_VALUE('{a:1, b:2, c:3}', '$.b')
FROM DUAL;

Hasil:

2

Dalam hal ini saya menentukan $.b untuk mengembalikan nilai skalar pada b .

Berikut ini contoh mengembalikan nilai dari array:

SELECT 
    JSON_VALUE('["a", "b", "c"]', '$[2]')
FROM DUAL;

Hasil:

c

Array berbasis nol, jadi $[2] mengembalikan elemen larik ketiga.

Penanganan Kesalahan

Ada tiga klausa yang dapat Anda gunakan untuk menentukan apa yang harus dikembalikan setiap kali jenis kesalahan tertentu terjadi. Klausanya adalah:

  • NULL ON ERROR – Mengembalikan null ketika terjadi kesalahan. Ini adalah default.
  • ERROR ON ERROR – Mengembalikan kesalahan Oracle yang sesuai saat terjadi kesalahan.
  • DEFAULT literal ON ERROR – Mengembalikan literal ketika terjadi kesalahan. Jenis data literal harus cocok dengan tipe data dari nilai yang dikembalikan oleh fungsi.

Ini contohnya:

SELECT 
    JSON_VALUE('["a", "b", "c"]', '$[3]' NULL ON ERROR) AS "r1",
    JSON_VALUE('["a", "b", "c"]', '$[3]' DEFAULT 'Oops!' ON ERROR) AS "r2"
FROM DUAL;

Hasil:

     r1       r2 
_______ ________ 
null    Oops!   

Ini dia dengan ERROR ON ERROR klausa:

SELECT 
    JSON_VALUE('["a", "b", "c"]', '$[3]' ERROR ON ERROR)
FROM DUAL;

Hasil:

Error report -
ORA-40462: JSON_VALUE evaluated to no value

Klausa kesalahan di atas adalah untuk menangani kesalahan berikut:

  • Argumen pertama bukanlah data JSON yang terbentuk dengan baik menggunakan sintaks JSON yang ketat atau longgar
  • Nilai nonskalar ditemukan saat data JSON dievaluasi menggunakan ekspresi jalur SQL/JSON
  • Tidak ada kecocokan yang ditemukan saat data JSON dievaluasi menggunakan ekspresi jalur SQL/JSON. Anda dapat mengganti perilaku untuk jenis kesalahan ini dengan menentukan JSON_value_on_empty_clause .
  • Tipe data nilai yang dikembalikan tidak cukup besar untuk menampung nilai yang dikembalikan

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.

Contoh:

SELECT 
    JSON_VALUE('["a", "b", "c"]', '$[3]' DEFAULT 'Dang!' ON EMPTY)
FROM DUAL;

Hasil:

Dang!

Jika Anda menghilangkan klausa ini, maka klausa kesalahan menentukan nilai yang dikembalikan ketika tidak ada kecocokan yang ditemukan.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gaji maks ke-n di Oracle

  2. Cara menambahkan nomor urut untuk setiap elemen dalam grup menggunakan kueri SQL tanpa tabel temp

  3. Memanggil PROSEDUR yang tersimpan di Toad

  4. Bagaimana menghindari kesalahan mutasi tabel

  5. Buat pemicu yang memperbarui kolom di satu tabel saat kolom di tabel lain diperbarui