sql >> Databasteknik >  >> RDS >> Oracle

JSON_VALUE() Funktion i Oracle

I Oracle Database, JSON_VALUE() funktionen hittar ett specificerat skalärt JSON-värde i JSON-data och returnerar det som ett SQL-värde.

Syntax

Syntaxen ser ut så här:

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 ]
  )

Var:

  • expr är JSON-dokumentet du vill fråga
  • JSON_basic_path_expression är SQL/JSON-sökvägsuttrycket. Detta sökvägsuttryck används för att utvärdera expr och hitta ett skalärt JSON-värde som matchar eller uppfyller sökvägsuttrycket.
  • JSON_query_returning_clause anger datatypen och formatet för värdet som returneras av funktionen.
  • JSON_query_on_error_clause anger värdet som returneras när vissa fel uppstår.
  • JSON_query_on_empty_clause anger värdet som returneras om ingen matchning hittas när JSON-data utvärderas med SQL/JSON-sökvägsuttrycket.
  • JSON_value_on_mismatch_clause kan användas för att ange ignorera, fel eller null för felfall som extra data, saknade data och typfel. Det kan tillämpas generellt eller från fall till fall.

Se Oracle-dokumentationen för en detaljerad förklaring av de valfria klausulerna.

Exempel

Här är ett exempel för att visa hur JSON_VALUE() funktionen fungerar:

SELECT 
    JSON_VALUE('{a:1, b:2, c:3}', '$.b')
FROM DUAL;

Resultat:

2

I det här fallet angav jag $.b för att returnera det skalära värdet vid b .

Här är ett exempel på att returnera ett värde från en array:

SELECT 
    JSON_VALUE('["a", "b", "c"]', '$[2]')
FROM DUAL;

Resultat:

c

Arrayer är nollbaserade, och så $[2] returnerar det tredje matriselementet.

Felhantering

Det finns tre satser som du kan använda för att specificera vad som ska returneras när vissa typer av fel uppstår. Klausulerna är:

  • NULL ON ERROR – Returnerar null när ett fel uppstår. Detta är standard.
  • ERROR ON ERROR – Returnerar lämpligt Oracle-fel när ett fel uppstår.
  • DEFAULT literal ON ERROR – Returnerar literal när ett fel uppstår. Datatypen för literal måste matcha datatypen för värdet som returneras av funktionen.

Här är ett exempel:

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!   

Här är 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

Ovanstående felklausuler är till för att hantera följande fel:

  • Det första argumentet är inte välformad JSON-data med strikt eller slapp JSON-syntax
  • Ett icke-skalärt värde hittas när JSON-data utvärderas med SQL/JSON-sökvägsuttrycket
  • Ingen matchning hittades när JSON-data utvärderas med SQL/JSON-sökvägsuttrycket. Du kan åsidosätta beteendet för den här typen av fel genom att ange JSON_value_on_empty_clause .
  • Returvärdets datatyp är inte tillräckligt stor för att hålla returvärdet

Hantera tomma resultat

Du kan också använda en sats för att ange värdet som returneras om ingen matchning hittas. Den här klausulen låter dig ange ett annat utfall för den här typen av fel än det utfall som anges med felklausulerna.

Dessa klausuler är:

  • NULL ON EMPTY – Returnerar null när ingen matchning hittas.
  • ERROR ON EMPTY – Returnerar lämpligt Oracle-fel när ingen matchning hittas.
  • DEFAULT literal ON EMPTY – Returnerar literal när ingen matchning hittas. Datatypen för literal måste matcha datatypen för värdet som returneras av den här funktionen.

Exempel:

SELECT 
    JSON_VALUE('["a", "b", "c"]', '$[3]' DEFAULT 'Dang!' ON EMPTY)
FROM DUAL;

Resultat:

Dang!

Om du utelämnar den här satsen bestämmer felsatsen värdet som returneras när ingen matchning hittas.


  1. COLLATION() Funktion i Oracle

  2. PostgreSQL Väljer senaste posten för ett givet ID

  3. Linux-filsystem och riktmärken för PostgreSQL-kontrollpunkter

  4. Django JSONFältfiltrering