V databázi Oracle je JSON_TABLE() vytváří relační pohled na data JSON. Umožňuje prezentovat hodnoty v dokumentu JSON ve formátu tabulky – jako řádky a sloupce.
Syntaxe
Syntaxe vypadá takto:
JSON_TABLE
( expr [ FORMAT JSON ] [ , JSON_basic_path_expression ]
[ JSON_table_on_error_clause ] [ JSON_table_on_empty_clause ]
JSON_columns_clause ) Kde:
exprje dokument JSON, na který se chcete dotazovatJSON_basic_path_expressionje výraz cesty SQL/JSON.JSON_query_on_error_clauseurčuje hodnotu vrácenou při výskytu určitých chyb.JSON_query_on_empty_clauseurčuje hodnotu vrácenou, pokud není nalezena žádná shoda.JSON_columns_clausedefinuje sloupce ve virtuální relační tabulce vrácené funkcí.
JSON_TABLE() funkci lze použít pouze v FROM klauzule SELECT prohlášení.
Příklad
Zde je příklad demonstrující, jak to funguje:
SELECT *
FROM JSON_TABLE('{a:1, b:2, c:3}', '$' COLUMNS(a, b, c)); Výsledek:
A B C ____ ____ ____ 1 2 3
Zde je s trochu více daty:
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)
); Výsledek:
A B C ____ ____ ____ 1 2 3 4 5 6 7 8 9
Méně sloupců
Co se stane, pokud snížíme počet sloupců zadaných v COLUMNS klauzule:
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)
); Výsledek:
A B ____ ____ 1 2 4 5 7 8
Stejného výsledku můžeme dosáhnout určením vybraných sloupců v SELECT seznam:
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)
); Výsledek:
A B ____ ____ 1 2 4 5 7 8
Vyberte konkrétní řádky
Můžeme použít klauzule jako WHERE chcete-li vybrat pouze ty řádky, které splňují určitá kritéria:
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; Výsledek:
A B C ____ ____ ____ 4 5 6
Zpracování chyb
K řešení chyb můžeme použít následující klauzule:
NULL ON ERROR- Pokud vstup není ve správném formátu JSON, nebudou vráceny žádné další řádky od bodu, ve kterém byla chyba zjištěna.
- Pokud není při vyhodnocování výrazu cesty řádku nalezena žádná shoda, nejsou vráceny žádné řádky.
- Nastaví výchozí chybové chování pro všechny výrazy sloupců na
NULL ON ERROR
ERROR ON ERROR- Pokud vstup není ve správném formátu JSON, dojde k chybě.
- Pokud není při vyhodnocování výrazu cesty řádku nalezena žádná shoda, dojde k chybě
- Nastaví výchozí chybové chování pro všechny výrazy sloupců na
ERROR ON ERROR
Zde je příklad 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)
); Výsledek:
A B C ____ ____ ____ 1 2 3 4 5 6
Protože JSON_TABLE() Funkce podporuje vyhodnocení streamování, řádky lze vrátit dříve, než narazíte na část vstupu s chybou. To je přesně to, co můžeme vidět na tomto příkladu – dostali jsme první dva řádky, ale ne třetí (kvůli tomu, že část JSON není správně vytvořený JSON).
Zde je to s ERROR ON ERROR klauzule:
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)
); Výsledek:
Error report - ORA-40441: JSON syntax error
Zpracování prázdných výsledků
Pokud není nalezena žádná shoda, můžete také použít klauzuli k určení vrácené hodnoty. Tato klauzule vám umožňuje určit jiný výsledek pro tento typ chyby, než jaký je uveden v klauzuli o chybě.
Tyto klauzule jsou:
NULLONEMPTY– Pokud není nalezena žádná shoda, vrátí hodnotu null.ERRORONEMPTY– Pokud není nalezena žádná shoda, vrátí příslušnou chybu Oracle.DEFAULTliteralONEMPTY– Vrátíliteralkdyž není nalezena žádná shoda. Datový typliteralmusí odpovídat datovému typu hodnoty vrácené touto funkcí.
Další informace o JSON_TABLE() najdete v dokumentaci Oracle funkce.