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:
expr
jest dokumentem JSON, do którego chcesz wysłać zapytanieJSON_basic_path_expression
jest wyrażeniem ścieżki SQL/JSON.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.JSON_columns_clause
definiuje 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:
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ę.
Zobacz dokumentację Oracle, aby uzyskać więcej informacji o JSON_TABLE()
funkcja.