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:
expr
je dokument JSON, na který se chcete dotazovatJSON_basic_path_expression
je výraz cesty SQL/JSON.JSON_query_on_error_clause
určuje hodnotu vrácenou při výskytu určitých chyb.JSON_query_on_empty_clause
určuje hodnotu vrácenou, pokud není nalezena žádná shoda.JSON_columns_clause
definuje 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:
NULL
ON
EMPTY
– Pokud není nalezena žádná shoda, vrátí hodnotu null.ERROR
ON
EMPTY
– Pokud není nalezena žádná shoda, vrátí příslušnou chybu Oracle.DEFAULT
literal
ON
EMPTY
– Vrátíliteral
když není nalezena žádná shoda. Datový typliteral
musí odpovídat datovému typu hodnoty vrácené touto funkcí.
Další informace o JSON_TABLE()
najdete v dokumentaci Oracle funkce.