sql >> Base de Datos >  >> RDS >> Oracle

Función JSON_OBJECTAGG() en Oracle

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 cuando expr 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.