sql >> Database teknologi >  >> RDS >> Oracle

JSON_VALUE() Funktion i Oracle

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 evaluere expr 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 – Returnerer literal når der opstår en fejl. Datatypen for literal 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 – Returnerer literal når der ikke findes noget match. Datatypen literal 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.


  1. Hvordan bruger man en fremmednøgle i sqlite?

  2. Sådan sletter du en række i oracle

  3. Parameter Sniffing (eller Spoofing) i SQL Server

  4. MigrationSchemaMissing(Kan ikke oprette tabellen django_migrations (%s) % exc)