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:
exprist das JSON-Dokument, das Sie abfragen möchtenJSON_basic_path_expressionist der SQL/JSON-Pfadausdruck. Dieser Pfadausdruck wird verwendet, umexprauszuwerten und finden Sie einen skalaren JSON-Wert, der mit dem Pfadausdruck übereinstimmt oder ihn erfüllt.JSON_query_returning_clausegibt den Datentyp und das Format des von der Funktion zurückgegebenen Werts an.JSON_query_on_error_clausegibt den Wert an, der zurückgegeben wird, wenn bestimmte Fehler auftreten.JSON_query_on_empty_clausegibt 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_clausekann 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:
NULLONERROR– Gibt null zurück, wenn ein Fehler auftritt. Dies ist die Voreinstellung.ERRORONERROR– Gibt den entsprechenden Oracle-Fehler zurück, wenn ein Fehler auftritt.DEFAULTliteralONERROR– Gibtliteralzurück wenn ein Fehler auftritt. Der Datentypliteralmuss 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_clauseangeben . - 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:
NULLONEMPTY– Gibt null zurück, wenn keine Übereinstimmung gefunden wird.ERRORONEMPTY– Gibt den entsprechenden Oracle-Fehler zurück, wenn keine Übereinstimmung gefunden wird.DEFAULTliteralONEMPTY– Gibtliteralzurück wenn keine Übereinstimmung gefunden wird. Der Datentyp vonliteralmuss 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.