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:
exprjest dokumentem JSON, do którego chcesz wysłać zapytanieJSON_basic_path_expressionjest wyrażeniem ścieżki SQL/JSON. To wyrażenie ścieżki służy do ocenyexpri znajdź skalarną wartość JSON, która pasuje lub spełnia wyrażenie ścieżki.JSON_query_returning_clauseokreśla typ danych i format wartości zwracanej przez funkcję.JSON_query_on_error_clauseokreśla wartość zwracaną w przypadku wystąpienia pewnych błędów.JSON_query_on_empty_clauseokreś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_clausemoż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:
NULLONERROR– Zwraca wartość null, gdy wystąpi błąd. To jest ustawienie domyślne.ERRORONERROR– Zwraca odpowiedni błąd Oracle, gdy wystąpi błąd.DEFAULTliteralONERROR– Zwracaliteralgdy wystąpi błąd. Typ danychliteralmusi 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:
NULLONEMPTY– Zwraca wartość null, gdy nie zostanie znalezione żadne dopasowanie.ERRORONEMPTY– Zwraca odpowiedni błąd Oracle, gdy nie zostanie znalezione dopasowanie.DEFAULTliteralONEMPTY– Zwracaliteralgdy nie zostanie znalezione żadne dopasowanie. Typ danychliteralmusi 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.