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ärderaexpr
och hitta ett skalärt JSON-värde som matchar eller uppfyller sökvägsuttrycket.JSON_query_returning_clause
anger datatypen och formatet för värdet som returneras av funktionen.JSON_query_on_error_clause
anger värdet som returneras när vissa fel uppstår.JSON_query_on_empty_clause
anger värdet som returneras om ingen matchning hittas när JSON-data utvärderas med SQL/JSON-sökvägsuttrycket.JSON_value_on_mismatch_clause
kan 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:
NULL
ON
ERROR
– Returnerar null när ett fel uppstår. Detta är standard.ERROR
ON
ERROR
– Returnerar lämpligt Oracle-fel när ett fel uppstår.DEFAULT
literal
ON
ERROR
– Returnerarliteral
när ett fel uppstår. Datatypen förliteral
må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:
NULL
ON
EMPTY
– Returnerar null när ingen matchning hittas.ERROR
ON
EMPTY
– Returnerar lämpligt Oracle-fel när ingen matchning hittas.DEFAULT
literal
ON
EMPTY
– Returnerarliteral
när ingen matchning hittas. Datatypen förliteral
må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.