- Catégories :
Fonctions de données semi-structurées et structurées (Carte)
MAP_INSERT¶
Renvoie une nouvelle MAP constituée de la MAP d’entrée ainsi que d’une nouvelle paire clé-valeur insérée (ou une clé existante mise à jour avec une nouvelle valeur).
Syntaxe¶
MAP_INSERT( <map> , <key> , <value> [ , <updateFlag> ] )
Arguments¶
map
La carte source dans laquelle la nouvelle paire clé-valeur est insérée.
key
La nouvelle clé à insérer dans la carte. Doit être différente de toutes les clés existantes dans la carte, à moins que
updateFlag
ne soit défini sur TRUE.value
La valeur associée à la clé.
Facultatif
updateFlag
Indicateur booléen qui, lorsqu’il est défini sur TRUE, spécifie que la valeur d’entrée est utilisée pour mettre à jour/remplacer une clé existante dans la carte, plutôt que d’insérer une nouvelle paire clé-valeur.
La valeur par défaut est FALSE.
Renvoie¶
Renvoie une MAP constituée de la MAP d’entrée ainsi que d’une nouvelle paire clé-valeur insérée ou d’une clé existante mise à jour avec une nouvelle valeur.
Notes sur l’utilisation¶
Le type de l’expression de clé doit correspondre au type de la clé de la carte. Si le type est VARCHAR, les types peuvent être de longueurs différentes.
La fonction prend en charge les valeurs JSON NULL, mais pas les valeurs ni les clés SQL NULL :
Si
key
est une chaîne autre que NULL et sivalue
est une valeur JSON NULL (par exemple, PARSE_JSON(“NULL”)), la paire clé-valeur est insérée dans la carte renvoyée.Si
key
est une chaîne autre que NULL et sivalue
est une valeur SQL NULL (par exemple, NULL), la valeur est convertie en valeur JSON NULL et la paire clé-valeur est insérée dans la carte renvoyée.Si
key
est une valeur SQL NULL, la paire clé-valeur est omise de la carte renvoyée.
Si
updateFlag
est défini sur TRUE, l’entrée existantekey
est mise à jour sur l’entréevalue
. SiupdateFlag
est omis ou défini sur FALSE, et si la clé d’entrée existe déjà dans la carte, une erreur est renvoyée.Si
updateFlag
est défini sur TRUE, mais que la clé correspondante n’existe pas encore dans la carte, la paire clé-valeur est ajoutée.
Exemples¶
Insérer une troisième paire clé-valeur dans une carte contenant deux paires clé-valeur :
SELECT MAP_INSERT({'a':1,'b':2}::MAP(VARCHAR,NUMBER),'c',3);
+------------------------------------------------------+
| MAP_INSERT({'A':1,'B':2}::MAP(VARCHAR,NUMBER),'C',3) |
|------------------------------------------------------|
| { |
| "a": 1, |
| "b": 2, |
| "c": 3 |
| } |
+------------------------------------------------------+
Insérer deux nouvelles paires clé-valeur, tout en omettant une paire clé-valeur, dans une carte vide :
Key_One
comprend une valeur JSON NULL.Key_Two
se compose d’une valeur SQL NULL, qui est convertie en valeur JSON NULL.Key_Three
consiste en une chaîne de caractères contenant « null ».
SELECT MAP_INSERT(MAP_INSERT(MAP_INSERT({}::MAP(VARCHAR,VARCHAR),
'Key_One', PARSE_JSON('NULL')), 'Key_Two', NULL), 'Key_Three', 'null');
+---------------------------------------------------------------------------+
| MAP_INSERT(MAP_INSERT(MAP_INSERT({}::MAP(VARCHAR,VARCHAR), |
| 'KEY_ONE', PARSE_JSON('NULL')), 'KEY_TWO', NULL), 'KEY_THREE', 'NULL') |
|---------------------------------------------------------------------------|
| { |
| "Key_One": null, |
| "Key_Three": "null", |
| "Key_Two": null |
| } |
+---------------------------------------------------------------------------+
Mettre à jour une paire clé-valeur existante ("k1": 100
) avec une nouvelle valeur ("string-value"
) :
SELECT MAP_INSERT({'k1':100}::MAP(VARCHAR,VARCHAR), 'k1', 'string-value', TRUE) AS map;
+------------------------+
| MAP |
|------------------------|
| { |
| "k1": "string-value" |
| } |
+------------------------+