Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Função JSON_OBJECTAGG() no Oracle


No Oracle Database, o JSON_OBJECTAGG() A função cria um objeto JSON de um par chave-valor.

Normalmente, a chave da propriedade, o valor da propriedade ou ambos são colunas de expressões SQL.

Sintaxe


A sintaxe fica assim:
JSON_OBJECTAGG
  ( [ KEY ] string VALUE expr [ FORMAT JSON ]
    [ JSON_on_null_clause ] [ JSON_agg_returning_clause ]
    [ STRICT ] [ WITH UNIQUE KEYS ]
  )

Onde:
  • [ KEY ] key_expr VALUE val_expr especifica um par de valores-chave de propriedade.
  • FORMAT JSON indica que a string de entrada é JSON e, portanto, não será citada na saída.
  • JSON_on_null_clause especifica o comportamento a ser usado quando expr equivale a nulo (ou seja, inclua valores nulos na saída ou não).
  • JSON_returning_clause especifica o tipo de valor de retorno.
  • STRICT verifica se a saída da função de geração JSON é o JSON correto. Se a verificação falhar, um erro de sintaxe será gerado.
  • WITH UNIQUE KEYS garante que os objetos JSON gerados tenham chaves exclusivas.

Exemplo


Veja um exemplo para demonstrar como funciona:
SELECT JSON_OBJECTAGG(KEY 'score' VALUE 37) FROM DUAL;

Resultado:
{"score":37}

A KEY parte é opcional, então o seguinte obtém o mesmo resultado:
SELECT JSON_OBJECTAGG('score' VALUE 37) FROM DUAL;

Resultado:
{"score":37}

JSON aninhado


Se um dos valores passados ​​contiver JSON, você poderá usar o FORMAT JSON argumento para especificar que ele contém JSON e não deve ser citado na saída.

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

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

Veja o que acontece se removermos o FORMAT JSON papel:
SELECT JSON_OBJECTAGG(
    KEY 'details' 
    VALUE '{"name": "Peter", "score": 64}'
    ) 
FROM DUAL;

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

Exemplo de banco de dados


O JSON_OBJECTAGG() A função normalmente é usada para produzir documentos JSON com base nos valores em uma coluna do banco de dados.

Suponha que executemos a seguinte 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

Aqui está um exemplo de como podemos usar o JSON_OBJECTAGG() função para produzir um documento JSON de duas das colunas acima:
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}

Nesse caso, o job_id coluna é a chave, e o min_salary coluna é o valor.

Consulte a documentação da Oracle para obter uma explicação mais detalhada desta função.