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

JSON_OBJECTAGG() Funzione in Oracle

In Oracle Database, il JSON_OBJECTAGG() La funzione crea un oggetto JSON da una coppia chiave-valore.

In genere, la chiave della proprietà, il valore della proprietà o entrambi sono colonne di espressioni SQL.

Sintassi

La sintassi è questa:

JSON_OBJECTAGG
  ( [ KEY ] string VALUE expr [ FORMAT JSON ]
    [ JSON_on_null_clause ] [ JSON_agg_returning_clause ]
    [ STRICT ] [ WITH UNIQUE KEYS ]
  )

Dove:

  • [ KEY ] key_expr VALUE val_expr specifica una coppia chiave-valore della proprietà.
  • FORMAT JSON indica che la stringa di input è JSON e quindi non sarà tra virgolette nell'output.
  • JSON_on_null_clause specifica il comportamento da utilizzare quando expr equivale a null (ovvero includere o meno valori null nell'output).
  • JSON_returning_clause specifica il tipo di valore restituito.
  • STRICT controlla se l'output della funzione di generazione JSON è JSON corretto o meno. Se il controllo fallisce, viene generato un errore di sintassi.
  • WITH UNIQUE KEYS garantisce che gli oggetti JSON generati abbiano chiavi univoche.

Esempio

Ecco un esempio per dimostrare come funziona:

SELECT JSON_OBJECTAGG(KEY 'score' VALUE 37) FROM DUAL;

Risultato:

{"score":37}

Il KEY parte è facoltativa, quindi quanto segue ottiene lo stesso risultato:

SELECT JSON_OBJECTAGG('score' VALUE 37) FROM DUAL;

Risultato:

{"score":37}

JSON nidificato

Se uno dei valori passati contiene JSON, puoi utilizzare FORMAT JSON argomento per specificare che contiene JSON e non deve essere citato nell'output.

Esempio:

SELECT JSON_OBJECTAGG(
    KEY 'details' 
    VALUE '{"name": "Peter", "score": 64}' 
    FORMAT JSON
    ) 
FROM DUAL;

Risultato:

{"details":{"name": "Peter", "score": 64}}

Ecco cosa succede se rimuoviamo il FORMAT JSON parte:

SELECT JSON_OBJECTAGG(
    KEY 'details' 
    VALUE '{"name": "Peter", "score": 64}'
    ) 
FROM DUAL;

Risultato:

{"details":"{\"name\": \"Peter\", \"score\": 64}"} 

Esempio di database

Il JSON_OBJECTAGG() La funzione viene in genere utilizzata per produrre documenti JSON in base ai valori in una colonna del database.

Supponiamo di eseguire la seguente query:

SELECT *
FROM jobs
WHERE min_salary > 9000;

Risultato:

    JOB_ID                        JOB_TITLE    MIN_SALARY    MAX_SALARY 
__________ ________________________________ _____________ _____________ 
AD_PRES    President                                20000         40000 
AD_VP      Administration Vice President            15000         30000 
SA_MAN     Sales Manager                            10000         20000

Ecco un esempio di come possiamo usare JSON_OBJECTAGG() funzione per produrre un documento JSON da due delle colonne precedenti:

SELECT JSON_OBJECTAGG(KEY job_id VALUE min_salary) 
FROM jobs
WHERE min_salary > 9000;

Risultato:

{"AD_PRES":20000,"AD_VP":15000,"SA_MAN":10000}

In questo caso, il job_id colonna è la chiave e il min_salary colonna è il valore.

Consulta la documentazione di Oracle per una spiegazione più dettagliata di questa funzione.