I Oracle Database er JSON_VALUE()
funktionen finder en specificeret skalar JSON-værdi i JSON-data og returnerer den som en SQL-værdi.
Syntaks
Syntaksen ser sådan ud:
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 ]
)
Hvor:
expr
er det JSON-dokument, du vil forespørge påJSON_basic_path_expression
er SQL/JSON-stiudtrykket. Dette stiudtryk bruges til at evaluereexpr
og find en skalar JSON-værdi, der matcher eller opfylder stiudtrykket.JSON_query_returning_clause
angiver datatypen og formatet for den værdi, der returneres af funktionen.JSON_query_on_error_clause
angiver den værdi, der returneres, når visse fejl opstår.JSON_query_on_empty_clause
angiver den returnerede værdi, hvis der ikke findes noget match, når JSON-dataene evalueres ved hjælp af SQL/JSON-stiudtrykket.JSON_value_on_mismatch_clause
kan bruges til at angive ignorering, fejl eller nul for fejltilfælde, såsom ekstra data, manglende data og typefejl. Det kan anvendes generelt eller fra sag til sag.
Se Oracle-dokumentationen for en detaljeret forklaring af de valgfrie klausuler.
Eksempel
Her er et eksempel for at demonstrere, hvordan JSON_VALUE()
funktion virker:
SELECT
JSON_VALUE('{a:1, b:2, c:3}', '$.b')
FROM DUAL;
Resultat:
2
I dette tilfælde specificerede jeg $.b
for at returnere den skalære værdi ved b
.
Her er et eksempel på returnering af en værdi fra et array:
SELECT
JSON_VALUE('["a", "b", "c"]', '$[2]')
FROM DUAL;
Resultat:
c
Arrays er nul-baserede, og derfor $[2]
returnerer det tredje array-element.
Fejlhåndtering
Der er tre klausuler, som du kan bruge til at angive, hvad der skal returneres, når der opstår visse typer fejl. Klausulerne er:
NULL
ON
ERROR
– Returnerer null, når der opstår en fejl. Dette er standarden.ERROR
ON
ERROR
– Returnerer den relevante Oracle-fejl, når der opstår en fejl.DEFAULT
literal
ON
ERROR
– Returnererliteral
når der opstår en fejl. Datatypen forliteral
skal matche datatypen for den værdi, der returneres af funktionen.
Her er et eksempel:
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!
Her er 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
Ovenstående fejlsætninger er til håndtering af følgende fejl:
- Det første argument er ikke velformede JSON-data, der bruger streng eller slap JSON-syntaks
- Der findes en ikke-skalær værdi, når JSON-dataene evalueres ved hjælp af SQL/JSON-stiudtrykket
- Der blev ikke fundet noget match, når JSON-dataene evalueres ved hjælp af SQL/JSON-stiudtrykket. Du kan tilsidesætte adfærden for denne type fejl ved at angive
JSON_value_on_empty_clause
. - Returværdidatatypen er ikke stor nok til at holde returværdien
Håndtering af tomme resultater
Du kan også bruge en klausul til at angive den returnerede værdi, hvis der ikke findes noget match. Denne klausul giver dig mulighed for at angive et andet udfald for denne type fejl end det resultat, der er angivet med fejlklausulerne.
Disse klausuler er:
NULL
ON
EMPTY
– Returnerer null, når der ikke findes noget match.ERROR
ON
EMPTY
– Returnerer den relevante Oracle-fejl, når der ikke findes noget match.DEFAULT
literal
ON
EMPTY
– Returnererliteral
når der ikke findes noget match. Datatypenliteral
skal matche datatypen for den værdi, der returneres af denne funktion.
Eksempel:
SELECT
JSON_VALUE('["a", "b", "c"]', '$[3]' DEFAULT 'Dang!' ON EMPTY)
FROM DUAL;
Resultat:
Dang!
Hvis du udelader denne klausul, bestemmer fejlsætningen den værdi, der returneres, når der ikke findes noget match.