I Oracle Database, JSON_VALUE() funktionen hittar ett specificerat skalärt JSON-värde i JSON-data och returnerar det som ett SQL-värde.
Syntax
Syntaxen ser ut så här:
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 ]
) Var:
exprär JSON-dokumentet du vill frågaJSON_basic_path_expressionär SQL/JSON-sökvägsuttrycket. Detta sökvägsuttryck används för att utvärderaexproch hitta ett skalärt JSON-värde som matchar eller uppfyller sökvägsuttrycket.JSON_query_returning_clauseanger datatypen och formatet för värdet som returneras av funktionen.JSON_query_on_error_clauseanger värdet som returneras när vissa fel uppstår.JSON_query_on_empty_clauseanger värdet som returneras om ingen matchning hittas när JSON-data utvärderas med SQL/JSON-sökvägsuttrycket.JSON_value_on_mismatch_clausekan användas för att ange ignorera, fel eller null för felfall som extra data, saknade data och typfel. Det kan tillämpas generellt eller från fall till fall.
Se Oracle-dokumentationen för en detaljerad förklaring av de valfria klausulerna.
Exempel
Här är ett exempel för att visa hur JSON_VALUE() funktionen fungerar:
SELECT
JSON_VALUE('{a:1, b:2, c:3}', '$.b')
FROM DUAL; Resultat:
2
I det här fallet angav jag $.b för att returnera det skalära värdet vid b .
Här är ett exempel på att returnera ett värde från en array:
SELECT
JSON_VALUE('["a", "b", "c"]', '$[2]')
FROM DUAL; Resultat:
c
Arrayer är nollbaserade, och så $[2] returnerar det tredje matriselementet.
Felhantering
Det finns tre satser som du kan använda för att specificera vad som ska returneras när vissa typer av fel uppstår. Klausulerna är:
NULLONERROR– Returnerar null när ett fel uppstår. Detta är standard.ERRORONERROR– Returnerar lämpligt Oracle-fel när ett fel uppstår.DEFAULTliteralONERROR– Returnerarliteralnär ett fel uppstår. Datatypen förliteralmåste matcha datatypen för värdet som returneras av funktionen.
Här är ett exempel:
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; Resultat:
r1 r2 _______ ________ null Oops!
Här är den med ERROR ON ERROR klausul:
SELECT
JSON_VALUE('["a", "b", "c"]', '$[3]' ERROR ON ERROR)
FROM DUAL; Resultat:
Error report - ORA-40462: JSON_VALUE evaluated to no value
Ovanstående felklausuler är till för att hantera följande fel:
- Det första argumentet är inte välformad JSON-data med strikt eller slapp JSON-syntax
- Ett icke-skalärt värde hittas när JSON-data utvärderas med SQL/JSON-sökvägsuttrycket
- Ingen matchning hittades när JSON-data utvärderas med SQL/JSON-sökvägsuttrycket. Du kan åsidosätta beteendet för den här typen av fel genom att ange
JSON_value_on_empty_clause. - Returvärdets datatyp är inte tillräckligt stor för att hålla returvärdet
Hantera tomma resultat
Du kan också använda en sats för att ange värdet som returneras om ingen matchning hittas. Den här klausulen låter dig ange ett annat utfall för den här typen av fel än det utfall som anges med felklausulerna.
Dessa klausuler är:
NULLONEMPTY– Returnerar null när ingen matchning hittas.ERRORONEMPTY– Returnerar lämpligt Oracle-fel när ingen matchning hittas.DEFAULTliteralONEMPTY– Returnerarliteralnär ingen matchning hittas. Datatypen förliteralmåste matcha datatypen för värdet som returneras av den här funktionen.
Exempel:
SELECT
JSON_VALUE('["a", "b", "c"]', '$[3]' DEFAULT 'Dang!' ON EMPTY)
FROM DUAL; Resultat:
Dang!
Om du utelämnar den här satsen bestämmer felsatsen värdet som returneras när ingen matchning hittas.