JSON_ARRAYAGG

La funzione JSON_ARRAYAGG restituisce un array JSON contenente un elemento schiera per ogni valore in una serie di valori JSON o SQL.

Diagramma di sintassi di letturaSalta il diagramma della sintassi visiva JSON_ARRAYAGG ( JSON - espressione FORMAT JSONFORMAT BSONORDER BY,espressione - chiave di ordinamentoASCDESC ABSENT ON NULLNULL ON NULL RETURNINGCLOB (2G) CCSID 1208FORMAT JSONRETURNINGtipo di datiFORMAT JSONENCODING UTF8ENCODING UTF16 )
tipo di dati
Diagramma di sintassi di letturaSalta il diagramma della sintassi visivaCHARACTERCHAR(1)(numero intero)CHARACTERCHARVARYINGVARCHAR(numero intero)FOR SBCS DATAFOR MIXED DATAccsid - clausolaCHARACTERCHARLARGE OBJECTCLOB(1M)(numero interoKMG)FOR SBCS DATAFOR MIXED DATAccsid - clausolaGRAPHIC(1)(numero intero)GRAPHIC VARYINGVARGRAPHIC(numero intero)DBCLOB(1M)(numero interoKMG)ccsid - clausolaNATIONAL CHARACTERNATIONAL CHARNCHAR(1)(numero intero)NATIONAL CHARACTERNATIONAL CHARNCHARVARYINGNVARCHAR(numero intero)NATIONAL CHARACTERNCHARLARGE OBJECTNCLOB(1M)(numero interoKMG)normalize - clausolaBINARY(1)(numero intero)BINARY VARYINGVARBINARY(numero intero)BINARY LARGE OBJECTBLOB(1M)(numero interoKMG)
ccsid - clausola
Diagramma di sintassi di letturaSalta il diagramma della sintassi visivaCCSIDnumero interonormalize - clausola
normalizza - clausola
Diagramma di sintassi di letturaSalta il diagramma della sintassi visivaNOT NORMALIZEDNORMALIZED
JSON - espressione
L'espressione da utilizzare per generare un valore nell'array JSON. Il tipo di risultato di questa espressione può essere qualsiasi tipo di dato incorporato tranne XML, ROWID o DATALINK. Non può essere di tipo CHAR o VARCHAR bit data. Non può essere un tipo definito dall'utente che viene originato su uno qualsiasi di questi tipi di dati.
FORMAT JSON o FORMAT BSON
Specifica se JSON - expression è già dati formattati.
FORMATO JSON
JSON - espressione è formattata come dati JSON. Se JSON - expression è un tipo di dati di stringa di carattere o grafico, viene trattato come dati JSON. Se JSON - expression è un tipo di dati stringa binario, viene interpretato come dati UTF-8 o UTF-16 .
FORMATO BSON
JSON - expression è formattata come la rappresentazione BSON dei dati JSON e deve essere un tipo di dati stringa binario.
Se non è specificato né FORMAT JSON né FORMAT BSON:
  • Se JSON - expression è una delle funzioni integrate JSON_ARRAY, JSON_OBJECT, JSON_INTERR, JSON_ARRAYAGG o JSON_OBJECTAGG, il valore FORMAT esplicito o implicito della clausola RESTITUZIONE della funzione determina il formato di JSON - expression.
  • Se JSON - expression è un tipo di stringa binario, viene interpretato come FORMAT BSON.
  • Altrimenti, JSON - expression è considerato dati non formattati. Se il valore generato non è numerico, la stringa di risultato verrà costruita con stringhe racchiuse tra virgolette e eventuali caratteri speciali saranno evasi. Un valore numerico che non è un numero JSON valido, come INFINITY o NAN, si tradurrà in un errore.
ORDINA PER
Specifica l'ordine delle righe dallo stesso set di raggruppamento che vengono elaborati nell'aggregazione. Se la clausola ORDER BY non è specificata o se la clausola ORDER BY non può differenziare l'ordine del valore chiave di ordinamento, le righe nello stesso gruppo di raggruppamento vengono ordinate arbitrariamente.
sort - key - expression
Specifica un valore chiave di ordinamento che sia un nome di colonna o un'espressione. Il tipo di dati della colonna o dell'espressione non deve essere un valore DATALINK o XML ..
Asc
Elabora l' sort - key - expression in ordine crescente. Questo è il valore predefinito.
DESC
Elabora l' sort - key - expression in ordine decrescente.

L'ordinamento si basa sui valori dei tasti di ordinamento, che potrebbero o non potrebbero essere utilizzati in JSON - expression.

La somma degli attributi di lunghezza delle espressioni della chiave di ordinamentonon deve superare 3.5 gigabyte.

Se una sequenza di collante diversa da *HEX è in vigore quando l'istruzione che contiene la funzione JSON_ARRAYAGG viene eseguita e i sort - key - expressions sono dati SBCS, dati misti o dati Unicode, il risultato è ottenuto confrontando i valori ponderati. I valori ponderati sono derivati applicando la sequenza di collante alle espressioni - chiave di ordinamento.

ASSENTE SU NULL o NULL ON NULL
Specifica cosa restituire quando un elemento schiera prodotto da JSON - expression è il valore nullo.
ASSENTE SU NULL
Un elemento schiera nullo non è incluso nell'array JSON. Questo è il valore predefinito.
NULL SU NULL
Un elemento schiera nullo è incluso nell'array JSON.
RESTITUZIONE tipo di dati
Specifica il formato del risultato.
tipo di dati
Il tipo di dati del risultato. Per i risultati di CHAR e VARCHAR, il CCSID non può essere 65535. Il default è CLOB (2G) CCSID 1208.

Se viene specificato un codice identificativo e il tipo di dati è GRAPHIC, VARGRAPHIC o DBCLOB, il CCSID deve essere un Unicode.

Se l'attributo CCSID non viene specificato, il CCSID viene determinato come descritto in Specifica CAST.

FORMATO JSON
I dati JSON vengono restituiti come stringa JSON.
CODIFICA UTF8 o CODIFICA UTF16
La codifica da utilizzare quando tipo - dati è un tipo di stringa binario. Questa clausola è consentita solo per i tipi di stringa binari. Il default per le stringhe binarie è UTF8.

Il risultato può essere nullo. Se la serie di valori è vuota, il risultato è il valore nullo.

Esempio

  • Restituire un array JSON contenente tutti i numeri del reparto.
    SELECT JSON_ARRAYAGG(deptno) AS deptlist FROM dept;
    Il risultato è il seguente array JSON.
    ["A00","B01","C01","D01","D11","D21","E01","E11","E21","F22","G22","H22","I22","J22"]
  • Restituire un array JSON per ogni reparto contenente un elenco di dipendenti assegnati a quel reparto.
    SELECT workdept, JSON_ARRAYAGG(lastname ORDER BY lastname) AS dept_employees 
    FROM emp 
    WHERE workdept LIKE 'D%'
    GROUP BY workdept;
    Il risultato sono le seguenti 2 righe.
    DEPTNO      PROJLIST
     D11        ["ADAMSON","BROWN","JOHN","JONES","LUTZ","PIANKA","SCOUTTEN",
                 "STERN","WALKER","YAMAMOTO","YOSHIMURA"]
     D21        ["JEFFERSON","JOHNSON","MARINO","MONTEVERDE","PEREZ","PULASKI","SMITH"]
  • Restituire un oggetto JSON che contiene un elenco di dipartimenti e dipendenti in ogni reparto.
    SELECT JSON_OBJECT('department number' VALUE deptno,
                       'department name' VALUE deptname,
                       'employee list' VALUE 
                            JSON_ARRAYAGG(
                                  JSON_OBJECT('last name' VALUE lastname,
                                              'employee id' VALUE empno)
                                  ORDER BY lastname)) 
     FROM dept LEFT OUTER JOIN emp ON deptno = workdept
     WHERE deptno LIKE 'D%'
     GROUP BY deptno, deptname;
    Il risultato sono le seguenti 3 righe.
    {"department number":"D11","department name":"MANUFACTURING SYSTEMS",
        "employee list":[{"last name":"ADAMSON","employee id":"000150"},
                         {"last name":"BROWN","employee id":"000200"},
                         {"last name":"JOHN","employee id":"200220"},
                         {"last name":"JONES","employee id":"000210"},
                         {"last name":"LUTZ","employee id":"000220"},
                         {"last name":"PIANKA","employee id":"000160"},
                         {"last name":"SCOUTTEN","employee id":"000180"},
                         {"last name":"STERN","employee id":"000060"},
                         {"last name":"WALKER","employee id":"000190"},
                         {"last name":"YAMAMOTO","employee id":"200170"},
                         {"last name":"YOSHIMURA","employee id":"000170"}]}
    
    {"department number":"D21","department name":"ADMINISTRATION SYSTEMS",
        "employee list":[{"last name":"JEFFERSON","employee id":"000150"},
                          "last name":"JOHNSON","employee id":"000150"},
                          "last name":"MARINO","employee id":"000150"},
                          "last name":"MONTEVERDE","employee id":"000150"},
                          "last name":"PEREZ","employee id":"000150"},
                          "last name":"PULASKI","employee id":"000150"},
                          "last name":"SMITH","employee id":"000150"}]}
    
    {"department number":"D01","department name":"DEVELOPMENT CENTER"}