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öchtenJSON_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
– Gibtliteral
zurück wenn keine Übereinstimmung gefunden wird. Der Datentyp vonliteral
muss mit dem Datentyp des von dieser Funktion zurückgegebenen Werts übereinstimmen.
Weitere Informationen zu JSON_TABLE()
finden Sie in der Oracle-Dokumentation Funktion.