Oracle
 sql >> Datenbank >  >> RDS >> Oracle

JSON_TABLE()-Funktion in Oracle

In der Oracle-Datenbank die JSON_TABLE() Funktion erstellt eine relationale Ansicht von JSON-Daten. Es ermöglicht Ihnen, die Werte in einem JSON-Dokument im Tabellenformat darzustellen – als Zeilen und Spalten.

Syntax

Die Syntax lautet wie folgt:

JSON_TABLE
  ( expr [ FORMAT JSON ] [ , JSON_basic_path_expression ]
    [ JSON_table_on_error_clause ] [ JSON_table_on_empty_clause ] 
    JSON_columns_clause )

Wo:

  • expr ist das JSON-Dokument, das Sie abfragen möchten
  • JSON_basic_path_expression ist der SQL/JSON-Pfadausdruck.
  • JSON_query_on_error_clause gibt den Wert an, der zurückgegeben wird, wenn bestimmte Fehler auftreten.
  • JSON_query_on_empty_clause gibt den zurückgegebenen Wert an, wenn keine Übereinstimmung gefunden wird.
  • JSON_columns_clause definiert die Spalten in der virtuellen relationalen Tabelle, die von der Funktion zurückgegeben wird.

Die JSON_TABLE() Funktion kann nur im FROM verwendet werden -Klausel eines SELECT Aussage.

Beispiel

Hier ist ein Beispiel, um zu demonstrieren, wie es funktioniert:

SELECT *
FROM JSON_TABLE('{a:1, b:2, c:3}', '$' COLUMNS(a, b, c));

Ergebnis:

   A    B    C 
____ ____ ____ 
1    2    3    

Hier ist es mit etwas mehr Daten:

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)
    );

Ergebnis:

   A    B    C 
____ ____ ____ 
1    2    3    
4    5    6    
7    8    9   

Weniger Spalten

Folgendes passiert, wenn wir die Anzahl der in COLUMNS angegebenen Spalten reduzieren Klausel:

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)
    );

Ergebnis:

   A    B 
____ ____ 
1    2    
4    5    
7    8    

Wir können dasselbe Ergebnis erzielen, indem wir ausgewählte Spalten in SELECT angeben Liste:

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)
    );

Ergebnis:

   A    B 
____ ____ 
1    2    
4    5    
7    8    

Wählen Sie bestimmte Zeilen aus

Wir können Klauseln wie WHERE verwenden um nur die Zeilen auszuwählen, die ein bestimmtes Kriterium erfüllen:

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;

Ergebnis:

   A    B    C 
____ ____ ____ 
4    5    6    

Fehlerbehandlung

Wir können die folgenden Klauseln verwenden, um mit Fehlern umzugehen:

  • NULL ON ERROR
    • Wenn die Eingabe kein wohlgeformtes JSON ist, werden ab dem Punkt, an dem der Fehler erkannt wird, keine Zeilen mehr zurückgegeben.
    • Wenn bei der Auswertung des Zeilenpfadausdrucks keine Übereinstimmung gefunden wird, werden keine Zeilen zurückgegeben.
    • Setzt das Standardfehlerverhalten für alle Spaltenausdrücke auf NULL ON ERROR
  • ERROR ON ERROR
    • Wenn die Eingabe kein wohlgeformtes JSON ist, wird ein Fehler ausgelöst.
    • Wenn bei der Auswertung des Zeilenpfadausdrucks keine Übereinstimmung gefunden wird, wird ein Fehler ausgegeben
    • Setzt das Standardfehlerverhalten für alle Spaltenausdrücke auf ERROR ON ERROR

Hier ist ein Beispiel für 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)
    );

Ergebnis:

   A    B    C 
____ ____ ____ 
1    2    3    
4    5    6    

Da die JSON_TABLE() -Funktion die Streamingauswertung unterstützt, können Zeilen zurückgegeben werden, bevor der Teil der Eingabe mit dem Fehler auftritt. Genau das können wir in diesem Beispiel sehen – wir haben die ersten beiden Zeilen, aber nicht die dritte (da dieser Teil des JSON kein wohlgeformtes JSON ist).

Hier ist es mit dem ERROR ON ERROR Klausel:

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)
    );

Ergebnis:

Error report -
ORA-40441: JSON syntax error

Umgang mit leeren Ergebnissen

Sie können auch eine Klausel verwenden, um den zurückgegebenen Wert anzugeben, wenn keine Übereinstimmung gefunden wird. Mit dieser Klausel können Sie für diesen Fehlertyp ein anderes Ergebnis als das mit den Fehlerklauseln angegebene Ergebnis angeben.

Diese Klauseln sind:

  • NULL ON EMPTY – Gibt null zurück, wenn keine Übereinstimmung gefunden wird.
  • ERROR ON EMPTY – Gibt den entsprechenden Oracle-Fehler zurück, wenn keine Übereinstimmung gefunden wird.
  • DEFAULT literal ON EMPTY – Gibt literal zurück wenn keine Übereinstimmung gefunden wird. Der Datentyp von literal muss mit dem Datentyp des von dieser Funktion zurückgegebenen Werts übereinstimmen.

Weitere Informationen zu JSON_TABLE() finden Sie in der Oracle-Dokumentation Funktion.