sql >> Database >  >> RDS >> Oracle

JSON_VALUE() Functie in Oracle

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 opvragen
  • JSON_basic_path_expression is de SQL/JSON-padexpressie. Deze padexpressie wordt gebruikt om expr . 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 – Retourneert literal wanneer er een fout optreedt. Het gegevenstype van literal 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 – Retourneert literal wanneer er geen match wordt gevonden. Het gegevenstype literal 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.


  1. UnicodeEncodeError:'latin-1' codec kan geen teken coderen

  2. NIET IN selectie met NULL-waarden

  3. NUMTODSINTERVAL() Functie in Oracle

  4. Hoe te filteren in een-op-veel relatie met Android room db