In Oracle Database, de JSON_VALUE()
functie vindt een opgegeven scalaire JSON-waarde in JSON-gegevens en retourneert deze als een SQL-waarde.
Syntaxis
De syntaxis gaat als volgt:
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 ]
)
Waar:
expr
is het JSON-document dat u wilt opvragenJSON_basic_path_expression
is de SQL/JSON-padexpressie. Deze padexpressie wordt gebruikt omexpr
. te evalueren en zoek een scalaire JSON-waarde die overeenkomt met of voldoet aan de padexpressie.JSON_query_returning_clause
specificeert het gegevenstype en de indeling van de waarde die door de functie wordt geretourneerd.JSON_query_on_error_clause
specificeert de waarde die wordt geretourneerd wanneer bepaalde fouten optreden.JSON_query_on_empty_clause
specificeert de waarde die wordt geretourneerd als er geen overeenkomst wordt gevonden wanneer de JSON-gegevens worden geëvalueerd met behulp van de SQL/JSON-padexpressie.JSON_value_on_mismatch_clause
kan worden gebruikt om negeer, fout of null op te geven voor foutgevallen zoals extra gegevens, ontbrekende gegevens en typefouten. Het kan algemeen of per geval worden toegepast.
Zie de Oracle-documentatie voor een gedetailleerde uitleg van de optionele clausules.
Voorbeeld
Hier is een voorbeeld om te demonstreren hoe de JSON_VALUE()
functie werkt:
SELECT
JSON_VALUE('{a:1, b:2, c:3}', '$.b')
FROM DUAL;
Resultaat:
2
In dit geval heb ik $.b
. opgegeven om de scalaire waarde te retourneren op b
.
Hier is een voorbeeld van het retourneren van een waarde uit een array:
SELECT
JSON_VALUE('["a", "b", "c"]', '$[2]')
FROM DUAL;
Resultaat:
c
Arrays zijn gebaseerd op nul, en dus $[2]
geeft het derde array-element terug.
Foutafhandeling
Er zijn drie clausules die u kunt gebruiken om te specificeren wat moet worden geretourneerd wanneer bepaalde soorten fouten optreden. De clausules zijn:
NULL
ON
ERROR
– Retourneert null wanneer er een fout optreedt. Dit is de standaardinstelling.ERROR
ON
ERROR
– Retourneert de juiste Oracle-fout wanneer een fout optreedt.DEFAULT
literal
ON
ERROR
– Retourneertliteral
wanneer er een fout optreedt. Het gegevenstype vanliteral
moet overeenkomen met het gegevenstype van de waarde die door de functie wordt geretourneerd.
Hier is een voorbeeld:
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;
Resultaat:
r1 r2 _______ ________ null Oops!
Hier is het met de ERROR ON ERROR
clausule:
SELECT
JSON_VALUE('["a", "b", "c"]', '$[3]' ERROR ON ERROR)
FROM DUAL;
Resultaat:
Error report - ORA-40462: JSON_VALUE evaluated to no value
De bovenstaande foutclausules zijn voor het afhandelen van de volgende fouten:
- Het eerste argument is geen goed gevormde JSON-gegevens die een strikte of lakse JSON-syntaxis gebruiken
- Er wordt een niet-scalaire waarde gevonden wanneer de JSON-gegevens worden geëvalueerd met behulp van de SQL/JSON-padexpressie
- Er wordt geen overeenkomst gevonden wanneer de JSON-gegevens worden geëvalueerd met behulp van de SQL/JSON-padexpressie. U kunt het gedrag voor dit type fout overschrijven door de
JSON_value_on_empty_clause
op te geven . - Het gegevenstype van de retourwaarde is niet groot genoeg om de retourwaarde te bevatten
Lege resultaten afhandelen
U kunt ook een clausule gebruiken om de waarde op te geven die wordt geretourneerd als er geen overeenkomst wordt gevonden. Met deze clausule kunt u een andere uitkomst voor dit type fout specificeren dan de uitkomst die is gespecificeerd met de foutclausules.
Deze clausules zijn:
NULL
ON
EMPTY
– Retourneert null wanneer er geen overeenkomst is gevonden.ERROR
ON
EMPTY
– Retourneert de juiste Oracle-fout wanneer er geen overeenkomst wordt gevonden.DEFAULT
literal
ON
EMPTY
– Retourneertliteral
wanneer er geen match wordt gevonden. Het gegevenstypeliteral
moet overeenkomen met het gegevenstype van de waarde die door deze functie wordt geretourneerd.
Voorbeeld:
SELECT
JSON_VALUE('["a", "b", "c"]', '$[3]' DEFAULT 'Dang!' ON EMPTY)
FROM DUAL;
Resultaat:
Dang!
Als u deze clausule weglaat, bepaalt de foutclausule de waarde die wordt geretourneerd wanneer er geen overeenkomst wordt gevonden.