In der Oracle-Datenbank der JSON_VALUE()
-Funktion findet einen angegebenen skalaren JSON-Wert in JSON-Daten und gibt ihn als SQL-Wert zurück.
Syntax
Die Syntax lautet wie folgt:
JSON_VALUE
( expr [ FORMAT JSON ], JSON_basic_path_expression
[ JSON_value_returning_clause ] [ JSON_value_on_error_clause ]
[ JSON_value_on_empty_clause ][ JSON_value_on_mismatch_clause ]
)
Wo:
expr
ist das JSON-Dokument, das Sie abfragen möchtenJSON_basic_path_expression
ist der SQL/JSON-Pfadausdruck. Dieser Pfadausdruck wird verwendet, umexpr
auszuwerten und finden Sie einen skalaren JSON-Wert, der mit dem Pfadausdruck übereinstimmt oder ihn erfüllt.JSON_query_returning_clause
gibt den Datentyp und das Format des von der Funktion zurückgegebenen Werts an.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 bei der Auswertung der JSON-Daten mithilfe des SQL/JSON-Pfadausdrucks keine Übereinstimmung gefunden wird.JSON_value_on_mismatch_clause
kann verwendet werden, um für Fehlerfälle wie zusätzliche Daten, fehlende Daten und Typfehler Ignorieren, Fehler oder Null anzugeben. Es kann allgemein oder von Fall zu Fall angewendet werden.
Eine detaillierte Erläuterung der optionalen Klauseln finden Sie in der Oracle-Dokumentation.
Beispiel
Hier ist ein Beispiel, um zu demonstrieren, wie der JSON_VALUE()
Funktion funktioniert:
SELECT
JSON_VALUE('{a:1, b:2, c:3}', '$.b')
FROM DUAL;
Ergebnis:
2
In diesem Fall habe ich $.b
angegeben um den Skalarwert bei b
zurückzugeben .
Hier ist ein Beispiel für die Rückgabe eines Werts aus einem Array:
SELECT
JSON_VALUE('["a", "b", "c"]', '$[2]')
FROM DUAL;
Ergebnis:
c
Arrays sind nullbasiert, also $[2]
gibt das dritte Array-Element zurück.
Fehlerbehandlung
Es gibt drei Klauseln, mit denen Sie angeben können, was zurückgegeben werden soll, wenn bestimmte Arten von Fehlern auftreten. Die Klauseln sind:
NULL
ON
ERROR
– Gibt null zurück, wenn ein Fehler auftritt. Dies ist die Voreinstellung.ERROR
ON
ERROR
– Gibt den entsprechenden Oracle-Fehler zurück, wenn ein Fehler auftritt.DEFAULT
literal
ON
ERROR
– Gibtliteral
zurück wenn ein Fehler auftritt. Der Datentypliteral
muss mit dem Datentyp des von der Funktion zurückgegebenen Werts übereinstimmen.
Hier ist ein Beispiel:
SELECT
JSON_VALUE('["a", "b", "c"]', '$[3]' NULL ON ERROR) AS "r1",
JSON_VALUE('["a", "b", "c"]', '$[3]' DEFAULT 'Oops!' ON ERROR) AS "r2"
FROM DUAL;
Ergebnis:
r1 r2 _______ ________ null Oops!
Hier ist es mit dem ERROR ON ERROR
Klausel:
SELECT
JSON_VALUE('["a", "b", "c"]', '$[3]' ERROR ON ERROR)
FROM DUAL;
Ergebnis:
Error report - ORA-40462: JSON_VALUE evaluated to no value
Die obigen Fehlerklauseln dienen zur Behandlung der folgenden Fehler:
- Das erste Argument sind keine wohlgeformten JSON-Daten mit strenger oder laxer JSON-Syntax
- Ein nicht-skalarer Wert wird gefunden, wenn die JSON-Daten mit dem SQL/JSON-Pfadausdruck ausgewertet werden
- Es wird keine Übereinstimmung gefunden, wenn die JSON-Daten mit dem SQL/JSON-Pfadausdruck ausgewertet werden. Sie können das Verhalten für diesen Fehlertyp überschreiben, indem Sie die
JSON_value_on_empty_clause
angeben . - Der Datentyp des Rückgabewerts ist nicht groß genug, um den Rückgabewert aufzunehmen
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 angeben als das mit den Fehlerklauseln angegebene Ergebnis.
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.
Beispiel:
SELECT
JSON_VALUE('["a", "b", "c"]', '$[3]' DEFAULT 'Dang!' ON EMPTY)
FROM DUAL;
Ergebnis:
Dang!
Wenn Sie diese Klausel weglassen, bestimmt die Fehlerklausel den zurückgegebenen Wert, wenn keine Übereinstimmung gefunden wird.