Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Funkcja JSON_VALUE() w Oracle

W bazie danych Oracle JSON_VALUE() funkcja wyszukuje określoną skalarną wartość JSON w danych JSON i zwraca ją jako wartość SQL.

Składnia

Składnia wygląda tak:

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 ]
  )

Gdzie:

  • expr jest dokumentem JSON, do którego chcesz wysłać zapytanie
  • JSON_basic_path_expression jest wyrażeniem ścieżki SQL/JSON. To wyrażenie ścieżki służy do oceny expr i znajdź skalarną wartość JSON, która pasuje lub spełnia wyrażenie ścieżki.
  • JSON_query_returning_clause określa typ danych i format wartości zwracanej przez funkcję.
  • JSON_query_on_error_clause określa wartość zwracaną w przypadku wystąpienia pewnych błędów.
  • JSON_query_on_empty_clause określa wartość zwracaną, jeśli nie zostanie znalezione żadne dopasowanie, gdy dane JSON są oceniane za pomocą wyrażenia ścieżki SQL/JSON.
  • JSON_value_on_mismatch_clause może służyć do określenia ignorowania, błędu lub wartości null dla przypadków błędów, takich jak dodatkowe dane, brakujące dane i błędy typu. Może być stosowany ogólnie lub w każdym przypadku.

Zobacz dokumentację Oracle, aby uzyskać szczegółowe wyjaśnienie opcjonalnych klauzul.

Przykład

Oto przykład pokazujący, jak JSON_VALUE() funkcja działa:

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

Wynik:

2

W tym przypadku określiłem $.b aby zwrócić wartość skalarną w b .

Oto przykład zwracania wartości z tablicy:

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

Wynik:

c

Tablice są liczone od zera, więc $[2] zwraca trzeci element tablicy.

Obsługa błędów

Istnieją trzy klauzule, których możesz użyć, aby określić, co ma zostać zwrócone, gdy wystąpią pewne rodzaje błędów. Klauzule to:

  • NULL ON ERROR – Zwraca wartość null, gdy wystąpi błąd. To jest ustawienie domyślne.
  • ERROR ON ERROR – Zwraca odpowiedni błąd Oracle, gdy wystąpi błąd.
  • DEFAULT literal ON ERROR – Zwraca literal gdy wystąpi błąd. Typ danych literal musi odpowiadać typowi danych wartości zwracanej przez funkcję.

Oto przykład:

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;

Wynik:

     r1       r2 
_______ ________ 
null    Oops!   

Tutaj jest z ERROR ON ERROR klauzula:

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

Wynik:

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

Powyższe klauzule błędów dotyczą obsługi następujących błędów:

  • Pierwszy argument nie jest poprawnie sformułowanymi danymi JSON przy użyciu ścisłej lub luźnej składni JSON
  • Wartość nieskalarna zostaje znaleziona, gdy dane JSON są oceniane przy użyciu wyrażenia ścieżki SQL/JSON
  • Nie znaleziono dopasowania, gdy dane JSON są oceniane przy użyciu wyrażenia ścieżki SQL/JSON. Możesz zmienić zachowanie tego typu błędu, określając JSON_value_on_empty_clause .
  • Typ danych zwracanej wartości nie jest wystarczająco duży, aby pomieścić zwracaną wartość

Obsługa pustych wyników

Możesz również użyć klauzuli, aby określić zwracaną wartość, jeśli nie zostanie znalezione dopasowanie. Ta klauzula pozwala określić inny wynik dla tego typu błędu niż wynik określony w klauzulach błędu.

Te klauzule to:

  • NULL ON EMPTY – Zwraca wartość null, gdy nie zostanie znalezione żadne dopasowanie.
  • ERROR ON EMPTY – Zwraca odpowiedni błąd Oracle, gdy nie zostanie znalezione dopasowanie.
  • DEFAULT literal ON EMPTY – Zwraca literal gdy nie zostanie znalezione żadne dopasowanie. Typ danych literal musi odpowiadać typowi danych wartości zwracanej przez tę funkcję.

Przykład:

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

Wynik:

Dang!

Jeśli pominiesz tę klauzulę, klauzula błędu określa wartość zwracaną, gdy nie zostanie znalezione żadne dopasowanie.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy możesz WYBRAĆ wszystko oprócz 1 lub 2 pól, bez skurczu pisarza?

  2. Jak obsłużyć parametry opcjonalne w zapytaniu SQL?

  3. Błąd instalacji klienta Oracle — zbyt długa ścieżka

  4. NAME_IN wbudowana w Oracle D2k Forms

  5. WYCZYŚĆ EKRAN — skrót do Oracle SQL Developer?