JSON_ARRAYAGG |
Tableau agrégé |
|---|---|
| Oracle Database SQL | Oracle 12.2 (12c R2) ou supérieure |
Syntaxe
| JSON_ARRAYAGG ( expr [ FORMAT JSON ] [ order_by_clause ] [ JSON_on_null_clause ] [ JSON_agg_returning_clause ] [ STRICT ] [ WITH UNIQUE KEYS ] ) |
Paramètres
| Nom | Description |
|---|---|
| expr | Ce paramètre permet d'indiquer l'expression SQL dont les résultats seront collectés pour constituer les éléments du tableau JSON. Chaque ligne retournée par la requête contribue à une entrée dans le tableau final. |
| FORMAT JSON | Ce paramètre permet de signaler que les valeurs issues de l'expression sont déjà des fragments JSON bien formés, ce qui évite une conversion ou un échappement supplémentaires. |
| order_by_clause | Ce paramètre permet de définir l'ordre dans lequel les valeurs doivent être insérées dans le tableau JSON agrégé, selon un ou plusieurs critères de tri. |
| JSON_on_null_clause | Ce paramètre permet de contrôler le traitement des valeurs NULL dans les données source : NULL ON NULL conserve les nulls, tandis que ABSENT ON NULL les ignore dans le tableau généré. |
| JSON_agg_returning_clause | Ce paramètre permet de spécifier le type SQL (comme CLOB, VARCHAR2, etc.) dans lequel le tableau JSON agrégé doit être retourné, facilitant son utilisation dans d'autres contextes SQL. |
| STRICT | Ce paramètre permet d'exiger une validation stricte des expressions pour s'assurer qu'elles produisent des données valides au format JSON ; une erreur est levée en cas de contenu non conforme. |
| WITH UNIQUE KEYS | Ce paramètre permet de garantir que les objets JSON intégrés à l'intérieur du tableau ont des clés uniques, renforçant la conformité aux standards du format JSON, notamment lorsque des objets sont utilisés comme valeurs. |
Description
Cette fonction permet d'agréger plusieurs valeurs SQL en une seule structure de tableau JSON. Elle est utile pour transformer plusieurs lignes en une seule valeur JSON de type tableau.
Remarques
- Agrégation naturelle des résultats multiples : La fonction JSON_ARRAYAGG permet de transformer une série de lignes SQL issues d'une requête en un tableau JSON unique. Cette agrégation facilite l'interfaçage entre bases de données relationnelles et systèmes front-end modernes reposant sur le format JSON. Elle répond ainsi au besoin croissant de sérialisation des données en sortie SQL.
- Utilisation dans les services REST : Grâce à JSON_ARRAYAGG, on peut directement produire une sortie JSON à partir d'une requête SQL, ce qui est extrêmement utile dans les services RESTful. Cette fonction réduit la nécessité d'un traitement intermédiaire en PL/SQL ou dans un langage tiers comme Java ou Python pour formater les résultats en JSON.
- Support du tri des éléments via ORDER BY : Le paramètre order_by_clause offre un contrôle total sur l'ordre d'apparition des éléments dans le tableau JSON. Cela est essentiel lorsqu'on souhaite représenter les données dans une séquence logique ou temporelle, notamment pour des rapports ou des exports.
- Gestion des valeurs nulles personnalisée : Avec JSON_on_null_clause, l'utilisateur choisit explicitement s'il souhaite inclure les NULL ou les ignorer. Ce choix influence la sémantique de l'objet JSON final : dans certains cas, il est préférable de ne pas faire apparaître les valeurs absentes, notamment pour alléger la charge réseau ou simplifier le traitement côté client.
- Interopérabilité accrue grâce à RETURNING : Le paramètre JSON_agg_returning_clause permet de choisir le type SQL du résultat (exemple : CLOB, VARCHAR2). Cela optimise l'utilisation en fonction du volume de données attendu et de la capacité des applications consommatrices à gérer tel ou tel type de données.
- Traitement rigoureux avec le mode STRICT : L'ajout du mot-clef STRICT rend la fonction plus sûre en imposant une validation rigoureuse de la validité JSON des éléments. Cela réduit le risque d'erreurs silencieuses et garantit une meilleure conformité JSON, notamment en production.
- Contrôle de l'unicité des clefs JSON : Grâce à WITH UNIQUE KEYS, l'utilisateur s'assure que chaque objet JSON inséré dans le tableau a des clefs uniques. Cela évite les doublons de clef dans les structures imbriquées, ce qui est non conforme au standard JSON et peut causer des erreurs d'analyse côté client.
- Support des fragments JSON pré-formatés : Le paramètre FORMAT JSON signale que l'expression en entrée est déjà du JSON, ce qui évite les transformations inutiles. C'est utile lorsqu'on entrepose déjà du JSON dans une colonne ou lorsqu'on injecte des fragments générés par d'autres fonctions JSON.
- Performances améliorées pour le rendu JSON : La génération du tableau JSON en base de données permet de gagner en performances, surtout quand on compare avec des approches consistant à construire les tableaux ligne par ligne dans l'application. Cela réduit également la charge côté middleware.
- Simplicité d'intégration dans les vues et CTE : JSON_ARRAYAGG peut être facilement intégré dans des vues ou des expressions de table communes (WITH), ce qui permet de générer des structures complexes et imbriquées directement dans une requête. Cela favorise un modèle déclaratif et réduit les étapes de traitement.
- Alternative moderne à XMLAGG : De la même manière qu'XMLAGG permettait d'agréger des fragments XML, JSON_ARRAYAGG est son pendant moderne pour le JSON. C'est donc une évolution naturelle pour les systèmes qui migrent vers des formats d'échange plus actuels.
- Compatible avec d'autres fonctions JSON : JSON_ARRAYAGG peut être utilisée en conjonction avec d'autres fonctions comme JSON_OBJECT, JSON_TABLE, ou JSON_QUERY. Cela permet de composer des documents JSON complexes avec plusieurs niveaux d'imbrication, tout en restant dans l'environnement SQL natif.
Dernière mise à jour : Dimanche, le 29 Juin 2025