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:
expris het JSON-document dat u wilt opvragenJSON_basic_path_expressionis 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_clausespecificeert het gegevenstype en de indeling van de waarde die door de functie wordt geretourneerd.JSON_query_on_error_clausespecificeert de waarde die wordt geretourneerd wanneer bepaalde fouten optreden.JSON_query_on_empty_clausespecificeert 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_clausekan 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:
NULLONERROR– Retourneert null wanneer er een fout optreedt. Dit is de standaardinstelling.ERRORONERROR– Retourneert de juiste Oracle-fout wanneer een fout optreedt.DEFAULTliteralONERROR– Retourneertliteralwanneer er een fout optreedt. Het gegevenstype vanliteralmoet 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_clauseop 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:
NULLONEMPTY– Retourneert null wanneer er geen overeenkomst is gevonden.ERRORONEMPTY– Retourneert de juiste Oracle-fout wanneer er geen overeenkomst wordt gevonden.DEFAULTliteralONEMPTY– Retourneertliteralwanneer er geen match wordt gevonden. Het gegevenstypeliteralmoet 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.