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

JSON_VALUE() Funzione in Oracle

In Oracle Database, il JSON_VALUE() La funzione trova un valore JSON scalare specificato nei dati JSON e lo restituisce come valore SQL.

Sintassi

La sintassi è questa:

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

Dove:

  • expr è il documento JSON che vuoi interrogare
  • JSON_basic_path_expression è l'espressione del percorso SQL/JSON. Questa espressione di percorso viene utilizzata per valutare expr e trova un valore JSON scalare che corrisponda o soddisfi l'espressione del percorso.
  • JSON_query_returning_clause specifica il tipo di dati e il formato del valore restituito dalla funzione.
  • JSON_query_on_error_clause specifica il valore restituito quando si verificano determinati errori.
  • JSON_query_on_empty_clause specifica il valore restituito se non viene trovata alcuna corrispondenza quando i dati JSON vengono valutati utilizzando l'espressione del percorso SQL/JSON.
  • JSON_value_on_mismatch_clause può essere utilizzato per specificare ignore, error o null per casi di errore come dati aggiuntivi, dati mancanti ed errori di tipo. Può essere applicato in generale, o caso per caso.

Consulta la documentazione Oracle per una spiegazione dettagliata delle clausole facoltative.

Esempio

Ecco un esempio per dimostrare come il JSON_VALUE() la funzione funziona:

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

Risultato:

2

In questo caso ho specificato $.b per restituire il valore scalare in b .

Ecco un esempio di restituzione di un valore da un array:

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

Risultato:

c

Gli array sono a base zero, quindi $[2] restituisce il terzo elemento dell'array.

Gestione degli errori

Esistono tre clausole che puoi utilizzare per specificare cosa restituire ogni volta che si verificano determinati tipi di errori. Le clausole sono:

  • NULL ON ERROR – Restituisce null quando si verifica un errore. Questa è l'impostazione predefinita.
  • ERROR ON ERROR – Restituisce l'errore Oracle appropriato quando si verifica un errore.
  • DEFAULT literal ON ERROR – Resi literal quando si verifica un errore. Il tipo di dati di literal deve corrispondere al tipo di dati del valore restituito dalla funzione.

Ecco un esempio:

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;

Risultato:

     r1       r2 
_______ ________ 
null    Oops!   

Eccolo con ERROR ON ERROR clausola:

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

Risultato:

Error report -
ORA-40462: JSON_VALUE evaluated to no value

Le clausole di errore di cui sopra servono per la gestione dei seguenti errori:

  • Il primo argomento non sono dati JSON ben formati che utilizzano una sintassi JSON rigorosa o lassista
  • Un valore non scalare viene trovato quando i dati JSON vengono valutati utilizzando l'espressione del percorso SQL/JSON
  • Non viene trovata alcuna corrispondenza quando i dati JSON vengono valutati utilizzando l'espressione del percorso SQL/JSON. Puoi ignorare il comportamento per questo tipo di errore specificando JSON_value_on_empty_clause .
  • Il tipo di dati del valore restituito non è abbastanza grande da contenere il valore restituito

Gestione dei risultati vuoti

È inoltre possibile utilizzare una clausola per specificare il valore restituito se non viene trovata alcuna corrispondenza. Questa clausola consente di specificare un esito diverso per questo tipo di errore rispetto all'esito specificato con le clausole di errore.

Queste clausole sono:

  • NULL ON EMPTY – Restituisce null quando non viene trovata alcuna corrispondenza.
  • ERROR ON EMPTY – Restituisce l'errore Oracle appropriato quando non viene trovata alcuna corrispondenza.
  • DEFAULT literal ON EMPTY – Restituisce literal quando non viene trovata alcuna corrispondenza. Il tipo di dati di literal deve corrispondere al tipo di dati del valore restituito da questa funzione.

Esempio:

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

Risultato:

Dang!

Se ometti questa clausola, la clausola error determina il valore restituito quando non viene trovata alcuna corrispondenza.