W bazie danych Oracle JSON_TABLE() funkcja tworzy relacyjny widok danych JSON. Umożliwia prezentację wartości w dokumencie JSON w formacie tabeli – jako wiersze i kolumny.
Składnia
Składnia wygląda tak:
JSON_TABLE
( expr [ FORMAT JSON ] [ , JSON_basic_path_expression ]
[ JSON_table_on_error_clause ] [ JSON_table_on_empty_clause ]
JSON_columns_clause ) Gdzie:
exprjest dokumentem JSON, do którego chcesz wysłać zapytanieJSON_basic_path_expressionjest wyrażeniem ścieżki SQL/JSON.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.JSON_columns_clausedefiniuje kolumny w wirtualnej tabeli relacyjnej zwracanej przez funkcję.
JSON_TABLE() funkcja może być używana tylko w FROM klauzula SELECT oświadczenie.
Przykład
Oto przykład pokazujący, jak to działa:
SELECT *
FROM JSON_TABLE('{a:1, b:2, c:3}', '$' COLUMNS(a, b, c)); Wynik:
A B C ____ ____ ____ 1 2 3
Tutaj jest z nieco większą ilością danych:
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)
); Wynik:
A B C ____ ____ ____ 1 2 3 4 5 6 7 8 9
Mniej kolumn
Oto, co się stanie, jeśli zmniejszymy liczbę kolumn określoną w COLUMNS klauzula:
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)
); Wynik:
A B ____ ____ 1 2 4 5 7 8
Ten sam wynik możemy osiągnąć, określając wybrane kolumny w SELECT lista:
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)
); Wynik:
A B ____ ____ 1 2 4 5 7 8
Wybierz określone wiersze
Możemy użyć klauzul takich jak WHERE aby wybrać tylko te wiersze, które spełniają określone kryteria:
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; Wynik:
A B C ____ ____ ____ 4 5 6
Obsługa błędów
Aby poradzić sobie z błędami, możemy użyć następujących klauzul:
NULL ON ERROR- Jeśli dane wejściowe nie są poprawnie sformułowane w formacie JSON, nie są zwracane żadne wiersze od punktu, w którym wykryto błąd.
- Jeśli podczas obliczania wyrażenia ścieżki wiersza nie zostanie znalezione żadne dopasowanie, żadne wiersze nie zostaną zwrócone.
- Ustawia domyślne zachowanie błędów dla wszystkich wyrażeń kolumn na
NULL ON ERROR
ERROR ON ERROR- Jeśli dane wejściowe nie są poprawnie sformułowane w formacie JSON, zgłaszany jest błąd.
- Jeśli podczas oceny wyrażenia ścieżki wiersza nie zostanie znalezione żadne dopasowanie, zostanie zgłoszony błąd
- Ustawia domyślne zachowanie błędów dla wszystkich wyrażeń kolumn na
ERROR ON ERROR
Oto przykład 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)
); Wynik:
A B C ____ ____ ____ 1 2 3 4 5 6
Ponieważ JSON_TABLE() funkcja obsługuje ocenę strumieniową, wiersze mogą być zwracane przed napotkaniem części danych wejściowych z błędem. Dokładnie to widzimy w tym przykładzie – otrzymaliśmy pierwsze dwa wiersze, ale nie trzeci (ze względu na to, że ta część JSON nie jest dobrze uformowana).
Tutaj jest z ERROR ON ERROR klauzula:
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)
); Wynik:
Error report - ORA-40441: JSON syntax error
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ę.
Zobacz dokumentację Oracle, aby uzyskać więcej informacji o JSON_TABLE() funkcja.