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ć zapytanieJSON_basic_path_expression
jest wyrażeniem ścieżki SQL/JSON. To wyrażenie ścieżki służy do ocenyexpr
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
– Zwracaliteral
gdy wystąpi błąd. Typ danychliteral
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
– Zwracaliteral
gdy nie zostanie znalezione żadne dopasowanie. Typ danychliteral
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.