Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Funkcja JSON_TABLE() w Oracle

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ć zapytanie
  • JSON_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 – Zwraca literal gdy nie zostanie znalezione żadne dopasowanie. Typ danych literal musi odpowiadać typowi danych wartości zwracanej przez tę funkcję.

Zobacz dokumentację Oracle, aby uzyskać więcej informacji o JSON_TABLE() funkcja.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Webrick bardzo wolno odpowiada. Jak to przyspieszyć?

  2. Jak utworzyć VARRAY jako obiekt bazy danych w bazie danych Oracle

  3. Analiza ciśnienia pamięci Stan ryzyka

  4. TO_TIMESTAMP_TZ() Funkcja w Oracle

  5. Wprowadzenie sterownika Easysoft Oracle® do środowiska SOA