JSON_ARRAYAGG

La función JSON_ARRAYAGG devuelve una matriz JSON que contiene un elemento de matriz para cada valor en un conjunto de valores JSON o SQL.

Leer diagrama de sintaxisOmitir diagrama de sintaxis visual JSON_ARRAYAGG ( expresión JSON FORMAT JSONFORMAT BSONORDER BY,expresión-clave-clasificaciónASCDESC ABSENT ON NULLNULL ON NULL RETURNINGCLOB (2G) CCSID 1208FORMAT JSONRETURNINGtipo-datosFORMAT JSONENCODING UTF8ENCODING UTF16 )
tipo-datos
Leer diagrama de sintaxisOmitir diagrama de sintaxis visualCHARACTERCHAR(1)(entero)CHARACTERCHARVARYINGVARCHAR(entero)FOR SBCS DATAFOR MIXED DATAcláusula-ccsidCHARACTERCHARLARGE OBJECTCLOB(1M)(enteroKMG)FOR SBCS DATAFOR MIXED DATAcláusula-ccsidGRAPHIC(1)(entero)GRAPHIC VARYINGVARGRAPHIC(entero)DBCLOB(1M)(enteroKMG)cláusula-ccsidNATIONAL CHARACTERNATIONAL CHARNCHAR(1)(entero)NATIONAL CHARACTERNATIONAL CHARNCHARVARYINGNVARCHAR(entero)NATIONAL CHARACTERNCHARLARGE OBJECTNCLOB(1M)(enteroKMG)cláusula-normalizaciónBINARY(1)(entero)BINARY VARYINGVARBINARY(entero)BINARY LARGE OBJECTBLOB(1M)(enteroKMG)
cláusula-ccsid
Leer diagrama de sintaxisOmitir diagrama de sintaxis visualCCSIDenterocláusula-normalización
cláusula-normalización
Leer diagrama de sintaxisOmitir diagrama de sintaxis visualNOT NORMALIZEDNORMALIZED
expresión-JSON
La expresión que se utiliza para generar un valor en la matriz JSON. El tipo de resultado de esta expresión puede ser cualquier tipo de datos incorporado excepto XML, ROWID o DATALINK. No pueden ser datos de bits CHAR o VARCHAR. No puede ser un tipo definido por el usuario que tenga su origen en cualquiera de estos tipos de datos.
FORMAT JSON o FORMAT BSON
Especifica si la expresión JSON ya tiene datos formateados.
JSON FORMAT
La expresión JSON se formatea como datos JSON. Si expresión JSON es un tipo de datos de serie gráfica o de caracteres, se trata como datos JSON. Si expresión JSON es un tipo de datos de serie binaria, se interpreta como datos UTF-8 o UTF-16 .
FORMATO BSON
La expresión JSON se formatea como la representación BSON de los datos JSON y debe ser un tipo de datos de serie binaria.
Si no se especifica FORMAT JSON ni FORMAT BSON:
  • Si expresión JSON es una de las funciones incorporadas JSON_ARRAY, JSON_OBJECT, JSON_QUERY, JSON_ARRAYAGG o JSON_OBJECTAGG, el valor FORMAT explícito o implícito de la cláusula DEVOLUCIÓN de la función determina el formato de expresión JSON.
  • Si expresión JSON es un tipo de serie binaria, se interpreta como FORMAT BSON.
  • De lo contrario, la expresión JSON se considera datos sin formato. Si el valor generado no es numérico, la serie de resultados se construirá con series entre comillas y se escaparán los caracteres especiales. Un valor numérico que no sea un número JSON válido, como INFINITY o NAN, dará como resultado un error.
ORDER BY
Especifica el orden de las filas del mismo conjunto de agrupación que se procesan en la agregación. Si no se especifica la cláusula ORDER BY, o si la cláusula ORDER BY no puede diferenciar el orden del valor de clave de clasificación, las filas del mismo conjunto de agrupación se ordenan de forma arbitraria.
expresión-clave-clasificación
Especifica un valor de clave de ordenación que es un nombre de columna o una expresión. El tipo de datos de la columna o expresión no debe ser un valor DATALINK o XML.
ASC
Procesa la expresión-clave-clasificación en orden ascendente. Este es el valor por omisión.
DESC
Procesa la expresión-clave-clasificación en orden descendente.

El orden se basa en los valores de las claves de clasificación, que pueden o no utilizarse en la expresión JSON.

La suma de los atributos de longitud de la expresión-clave-clasificaciónno debe superar los 3.5 gigabytes.

Si una secuencia de clasificación distinta de *HEX está en vigor cuando se ejecuta la sentencia que contiene la función JSON_ARRAYAGG y la expresión-clave-clasificaciónson datos SBCS, datos mixtos o datos Unicode, el resultado se obtiene comparando los valores ponderados. Los valores ponderados se derivan aplicando la secuencia de clasificación a las expresiones-clave-clasificación.

NOT ON NULL o NULL ON NULL
Especifica qué se debe devolver cuando un elemento de matriz producido por expresión JSON es el valor nulo.
AUSENTE EN NULO
Un elemento de matriz nulo no se incluye en la matriz JSON. Este es el valor por omisión.
NULL ON NULL
Se incluye un elemento de matriz nulo en la matriz JSON.
DEVOLVIENDO tipo-datos
Especifica el formato del resultado.
tipo-datos
El tipo de datos del resultado. Para los resultados CHAR y VARCHAR, el CCSID no puede ser 65535. El valor predeterminado es CLOB (2G) CCSID 1208.

Si se especifica un CCSID y el tipo-datos es GRAPHIC, VARGRAPHIC o DBCLOB, el CCSID debe ser un CCSID Unicode.

Si no se especifica el atributo CCSID, el CCSID se determina tal como se describe en la especificación CAST.

JSON FORMAT
Los datos JSON se devuelven como una serie JSON.
ENCODING UTF8 o ENCODING UTF16
La codificación que se utiliza cuando tipo-datos es un tipo de serie binaria. Esta cláusula sólo está permitida para tipos de serie binaria. El valor predeterminado para las series binarias es UTF8.

El resultado puede ser nulo. Si el conjunto de valores está vacío, el resultado es el valor nulo.

Ejemplo

  • Devuelve una matriz JSON que contiene todos los números de departamento.
    SELECT JSON_ARRAYAGG(deptno) AS deptlist FROM dept;
    El resultado es la siguiente matriz JSON.
    ["A00","B01","C01","D01","D11","D21","E01","E11","E21","F22","G22","H22","I22","J22"]
  • Devuelve una matriz JSON para cada departamento que contiene una lista de empleados asignados a dicho departamento.
    SELECT workdept, JSON_ARRAYAGG(lastname ORDER BY lastname) AS dept_employees 
    FROM emp 
    WHERE workdept LIKE 'D%'
    GROUP BY workdept;
    El resultado son las 2 filas siguientes.
    DEPTNO      PROJLIST
     D11        ["ADAMSON","BROWN","JOHN","JONES","LUTZ","PIANKA","SCOUTTEN",
                 "STERN","WALKER","YAMAMOTO","YOSHIMURA"]
     D21        ["JEFFERSON","JOHNSON","MARINO","MONTEVERDE","PEREZ","PULASKI","SMITH"]
  • Devuelve un objeto JSON que contiene una lista de departamentos y empleados de cada departamento.
    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;
    El resultado son las 3 filas siguientes.
    {"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"}