Oracle
 sql >> Base de données >  >> RDS >> Oracle

Fonction JSON_VALUE() dans Oracle

Dans Oracle Database, le JSON_VALUE() La fonction recherche une valeur JSON scalaire spécifiée dans les données JSON et la renvoie sous forme de valeur SQL.

Syntaxe

La syntaxe ressemble à ceci :

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

Où :

  • expr est le document JSON que vous souhaitez interroger
  • JSON_basic_path_expression est l'expression de chemin SQL/JSON. Cette expression de chemin est utilisée pour évaluer expr et trouvez une valeur JSON scalaire qui correspond ou satisfait à l'expression de chemin.
  • JSON_query_returning_clause spécifie le type de données et le format de la valeur renvoyée par la fonction.
  • JSON_query_on_error_clause spécifie la valeur renvoyée lorsque certaines erreurs se produisent.
  • JSON_query_on_empty_clause spécifie la valeur renvoyée si aucune correspondance n'est trouvée lorsque les données JSON sont évaluées à l'aide de l'expression de chemin SQL/JSON.
  • JSON_value_on_mismatch_clause peut être utilisé pour spécifier ignore, error ou null pour les cas d'erreur tels que les données supplémentaires, les données manquantes et les erreurs de type. Elle peut être appliquée de manière générale ou au cas par cas.

Voir la documentation Oracle pour une explication détaillée des clauses facultatives.

Exemple

Voici un exemple pour montrer comment le JSON_VALUE() la fonction fonctionne :

SELECT 
    JSON_VALUE('{a:1, b:2, c:3}', '$.b')
FROM DUAL;

Résultat :

2

Dans ce cas, j'ai spécifié $.b pour retourner la valeur scalaire en b .

Voici un exemple de renvoi d'une valeur à partir d'un tableau :

SELECT 
    JSON_VALUE('["a", "b", "c"]', '$[2]')
FROM DUAL;

Résultat :

c

Les tableaux sont basés sur zéro, et donc $[2] renvoie le troisième élément du tableau.

Gestion des erreurs

Il existe trois clauses que vous pouvez utiliser pour spécifier ce qu'il faut renvoyer chaque fois que certains types d'erreurs se produisent. Les clauses sont :

  • NULL ON ERROR – Renvoie null lorsqu'une erreur se produit. C'est la valeur par défaut.
  • ERROR ON ERROR – Renvoie l'erreur Oracle appropriée lorsqu'une erreur se produit.
  • DEFAULT literal ON ERROR – Renvoie literal lorsqu'une erreur se produit. Le type de données de literal doit correspondre au type de données de la valeur renvoyée par la fonction.

Voici un exemple :

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;

Résultat :

     r1       r2 
_______ ________ 
null    Oops!   

Le voici avec le ERROR ON ERROR clause :

SELECT 
    JSON_VALUE('["a", "b", "c"]', '$[3]' ERROR ON ERROR)
FROM DUAL;

Résultat :

Error report -
ORA-40462: JSON_VALUE evaluated to no value

Les clauses d'erreur ci-dessus permettent de gérer les erreurs suivantes :

  • Le premier argument n'est pas une donnée JSON bien formée utilisant une syntaxe JSON stricte ou laxiste
  • Une valeur non scalaire est trouvée lorsque les données JSON sont évaluées à l'aide de l'expression de chemin SQL/JSON
  • Aucune correspondance n'est trouvée lorsque les données JSON sont évaluées à l'aide de l'expression de chemin SQL/JSON. Vous pouvez remplacer le comportement de ce type d'erreur en spécifiant la JSON_value_on_empty_clause .
  • Le type de données de la valeur de retour n'est pas assez grand pour contenir la valeur de retour

Gestion des résultats vides

Vous pouvez également utiliser une clause pour spécifier la valeur renvoyée si aucune correspondance n'est trouvée. Cette clause vous permet de spécifier un résultat différent pour ce type d'erreur que le résultat spécifié avec les clauses d'erreur.

Ces clauses sont :

  • NULL ON EMPTY – Renvoie null lorsqu'aucune correspondance n'est trouvée.
  • ERROR ON EMPTY – Renvoie l'erreur Oracle appropriée lorsqu'aucune correspondance n'est trouvée.
  • DEFAULT literal ON EMPTY – Renvoie literal lorsqu'aucune correspondance n'est trouvée. Le type de données de literal doit correspondre au type de données de la valeur renvoyée par cette fonction.

Exemple :

SELECT 
    JSON_VALUE('["a", "b", "c"]', '$[3]' DEFAULT 'Dang!' ON EMPTY)
FROM DUAL;

Résultat :

Dang!

Si vous omettez cette clause, la clause d'erreur détermine la valeur renvoyée lorsqu'aucune correspondance n'est trouvée.