sql >> Databáze >  >> RDS >> Oracle

Funkce JSON_TABLE() v Oracle

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 dotazovat
  • JSON_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ý typ literal musí odpovídat datovému typu hodnoty vrácené touto funkcí.

Další informace o JSON_TABLE() najdete v dokumentaci Oracle funkce.


  1. .NET 4:Jak nakonfigurovat soubor EDMX v jiném sestavení ve Web.Config

  2. Jak zlepšit výkon pro filtrování data a času v SQL Server?

  3. SQL Server:ekvivalent kaskády drop tabulky?

  4. Jak extrahovat podřetězec z řetězce v Oracle/SQLite