En Oracle Database, el JSON_OBJECTAGG()
La función crea un objeto JSON a partir de un par clave-valor.
Normalmente, la clave de propiedad, el valor de propiedad o ambos son columnas de expresiones SQL.
Sintaxis
La sintaxis es así:
JSON_OBJECTAGG
( [ KEY ] string VALUE expr [ FORMAT JSON ]
[ JSON_on_null_clause ] [ JSON_agg_returning_clause ]
[ STRICT ] [ WITH UNIQUE KEYS ]
)
donde:
[ KEY ] key_expr VALUE val_expr
especifica un par clave-valor de propiedad.FORMAT JSON
indica que la cadena de entrada es JSON y, por lo tanto, no se citará en la salida.JSON_on_null_clause
especifica el comportamiento a usar cuandoexpr
equivale a nulo (es decir, incluye valores nulos en la salida o no).JSON_returning_clause
especifica el tipo de valor devuelto.STRICT
comprueba si la salida de la función de generación de JSON es JSON correcta o no. Si la comprobación falla, se genera un error de sintaxis.WITH UNIQUE KEYS
garantiza que los objetos JSON generados tengan claves únicas.
Ejemplo
Aquí hay un ejemplo para demostrar cómo funciona:
SELECT JSON_OBJECTAGG(KEY 'score' VALUE 37) FROM DUAL;
Resultado:
{"score":37}
La KEY
parte es opcional, por lo que lo siguiente logra el mismo resultado:
SELECT JSON_OBJECTAGG('score' VALUE 37) FROM DUAL;
Resultado:
{"score":37}
JSON anidado
Si uno de los valores que pasa contiene JSON, puede usar el FORMAT JSON
argumento para especificar que contiene JSON y no debe citarse en la salida.
Ejemplo:
SELECT JSON_OBJECTAGG(
KEY 'details'
VALUE '{"name": "Peter", "score": 64}'
FORMAT JSON
)
FROM DUAL;
Resultado:
{"details":{"name": "Peter", "score": 64}}
Esto es lo que sucede si eliminamos el FORMAT JSON
parte:
SELECT JSON_OBJECTAGG(
KEY 'details'
VALUE '{"name": "Peter", "score": 64}'
)
FROM DUAL;
Resultado:
{"details":"{\"name\": \"Peter\", \"score\": 64}"}
Ejemplo de base de datos
El JSON_OBJECTAGG()
La función se usa normalmente para producir documentos JSON basados en los valores en una columna de la base de datos.
Supongamos que ejecutamos la siguiente consulta:
SELECT *
FROM jobs
WHERE min_salary > 9000;
Resultado:
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
Aquí hay un ejemplo de cómo podemos usar el JSON_OBJECTAGG()
función para producir un documento JSON a partir de dos de las columnas anteriores:
SELECT JSON_OBJECTAGG(KEY job_id VALUE min_salary)
FROM jobs
WHERE min_salary > 9000;
Resultado:
{"AD_PRES":20000,"AD_VP":15000,"SA_MAN":10000}
En este caso, el job_id
columna es la clave, y el min_salary
columna es el valor.
Consulte la documentación de Oracle para obtener una explicación más detallada de esta función.