Oracle
 sql >> Base de données >  >> RDS >> Oracle

Fonction JSON_OBJECTAGG() dans Oracle

Dans Oracle Database, le JSON_OBJECTAGG() La fonction crée un objet JSON à partir d'une paire clé-valeur.

Généralement, la clé de propriété, la valeur de propriété ou les deux sont des colonnes d'expressions SQL.

Syntaxe

La syntaxe ressemble à ceci :

JSON_OBJECTAGG
  ( [ KEY ] string VALUE expr [ FORMAT JSON ]
    [ JSON_on_null_clause ] [ JSON_agg_returning_clause ]
    [ STRICT ] [ WITH UNIQUE KEYS ]
  )

Où :

  • [ KEY ] key_expr VALUE val_expr spécifie une paire clé-valeur de propriété.
  • FORMAT JSON indique que la chaîne d'entrée est JSON et ne sera donc pas entre guillemets dans la sortie.
  • JSON_on_null_clause spécifie le comportement à utiliser lorsque expr équivaut à null (c'est-à-dire inclure ou non des valeurs nulles dans la sortie).
  • JSON_returning_clause spécifie le type de valeur de retour.
  • STRICT vérifie si la sortie de la fonction de génération JSON est correcte ou non JSON. Si la vérification échoue, une erreur de syntaxe est générée.
  • WITH UNIQUE KEYS garantit que les objets JSON générés ont des clés uniques.

Exemple

Voici un exemple pour illustrer son fonctionnement :

SELECT JSON_OBJECTAGG(KEY 'score' VALUE 37) FROM DUAL;

Résultat :

{"score":37}

La KEY part est facultatif, donc ce qui suit produit le même résultat :

SELECT JSON_OBJECTAGG('score' VALUE 37) FROM DUAL;

Résultat :

{"score":37}

JSON imbriqué

Si l'une des valeurs que vous transmettez contient JSON, vous pouvez utiliser le FORMAT JSON argument pour spécifier qu'il contient JSON et ne doit pas être entre guillemets dans la sortie.

Exemple :

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

Résultat :

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

Voici ce qui se passe si nous supprimons le FORMAT JSON partie :

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

Résultat :

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

Exemple de base de données

Le JSON_OBJECTAGG() est généralement utilisée pour produire des documents JSON basés sur les valeurs d'une colonne de base de données.

Supposons que nous lancions la requête suivante :

SELECT *
FROM jobs
WHERE min_salary > 9000;

Résultat :

    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

Voici un exemple de la façon dont nous pouvons utiliser le JSON_OBJECTAGG() pour produire un document JSON à partir de deux des colonnes ci-dessus :

SELECT JSON_OBJECTAGG(KEY job_id VALUE min_salary) 
FROM jobs
WHERE min_salary > 9000;

Résultat :

{"AD_PRES":20000,"AD_VP":15000,"SA_MAN":10000}

Dans ce cas, le job_id colonne est la clé, et le min_salary la colonne est la valeur.

Voir la documentation d'Oracle pour une explication plus détaillée de cette fonction.