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ù :
exprest le document JSON que vous souhaitez interrogerJSON_basic_path_expressionest l'expression de chemin SQL/JSON. Cette expression de chemin est utilisée pour évaluerexpret trouvez une valeur JSON scalaire qui correspond ou satisfait à l'expression de chemin.JSON_query_returning_clausespécifie le type de données et le format de la valeur renvoyée par la fonction.JSON_query_on_error_clausespécifie la valeur renvoyée lorsque certaines erreurs se produisent.JSON_query_on_empty_clausespé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_clausepeut ê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 :
NULLONERROR– Renvoie null lorsqu'une erreur se produit. C'est la valeur par défaut.ERRORONERROR– Renvoie l'erreur Oracle appropriée lorsqu'une erreur se produit.DEFAULTliteralONERROR– Renvoieliterallorsqu'une erreur se produit. Le type de données deliteraldoit 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 :
NULLONEMPTY– Renvoie null lorsqu'aucune correspondance n'est trouvée.ERRORONEMPTY– Renvoie l'erreur Oracle appropriée lorsqu'aucune correspondance n'est trouvée.DEFAULTliteralONEMPTY– Renvoieliterallorsqu'aucune correspondance n'est trouvée. Le type de données deliteraldoit 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.