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 interrogerJSON_basic_path_expression
est l'expression de chemin SQL/JSON. Cette expression de chemin est utilisée pour évaluerexpr
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
– Renvoieliteral
lorsqu'une erreur se produit. Le type de données deliteral
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
– Renvoieliteral
lorsqu'aucune correspondance n'est trouvée. Le type de données deliteral
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.