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

JSON_VALUE()-Funktion in Oracle

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öchten
  • JSON_basic_path_expression ist der SQL/JSON-Pfadausdruck. Dieser Pfadausdruck wird verwendet, um expr 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 – Gibt literal zurück wenn ein Fehler auftritt. Der Datentyp literal 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 – 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.

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.