- Catégories :
Fonctions de données semi-structurées et structurées (Carte)
MAP_CONTAINS_KEY¶
Détermine si la MAP spécifiée contient la clé spécifiée.
Syntaxe¶
MAP_CONTAINS_KEY( <key> , <map> )
Arguments¶
key
La clé à trouver.
map
La carte à rechercher.
Renvoie¶
Renvoie TRUE si la carte spécifiée contient la clé spécifiée.
Renvoie FALSE si la carte spécifiée ne contient pas la clé spécifiée.
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.
Pour une entrée NULL, la sortie est NULL.
Exemples¶
La fonction recherche la clé k1
et la trouve dans la carte :
SELECT MAP_CONTAINS_KEY(
'k1',{'k1':'v1','k2':'v2','k3':'v3'}::MAP(VARCHAR,VARCHAR))
AS contains_key;
+--------------+
| CONTAINS_KEY |
|--------------|
| True |
+--------------+
La fonction recherche la clé k1
et ne la trouve pas dans la carte :
SELECT MAP_CONTAINS_KEY(
'k1',{'ka':'va','kb':'vb','kc':'vc'}::MAP(VARCHAR,VARCHAR))
AS contains_key;
+--------------+
| CONTAINS_KEY |
|--------------|
| False |
+--------------+
Une instruction SELECT transmet une clé qui utilise un type différent de celui de la clé de la carte :
SELECT MAP_CONTAINS_KEY(
'k1',{'1':'va','2':'vb','3':'vc'}::MAP(NUMBER,VARCHAR))
AS contains_key;
001065 (22023): SQL compilation error:
Function MAP_CONTAINS_KEY cannot be used with arguments of types VARCHAR(2) and MAP(NUMBER(38,0), VARCHAR(134217728))
Création d’une table temporaire qui contient des valeurs MAP :
CREATE OR REPLACE TEMP TABLE demo_maps(
id INTEGER,
attrs MAP(VARCHAR, VARCHAR),
defaults MAP(VARCHAR, VARCHAR),
keep_keys ARRAY(VARCHAR),
ins_key VARCHAR,
ins_val VARCHAR,
update_existing BOOLEAN,
del_key1 VARCHAR,
del_key2 VARCHAR);
INSERT INTO demo_maps SELECT
1,
{'color':'red','size':'M','brand':'Acme'}::MAP(VARCHAR, VARCHAR),
{'currency':'USD','size':'L'}::MAP(VARCHAR, VARCHAR),
['color','brand']::ARRAY(VARCHAR),
'material',
'cotton',
TRUE,
'size',
'brand';
INSERT INTO demo_maps SELECT
2,
{'color':'blue','brand':'ZenCo'}::MAP(VARCHAR, VARCHAR),
{'currency':'EUR','size':'M','brand':'ZenCo'}::MAP(VARCHAR, VARCHAR),
['brand','currency']::ARRAY(VARCHAR),
'brand',
'ZC',
FALSE,
'currency',
'material';
Interrogez la table pour afficher les données :
SELECT * FROM demo_maps;
+----+---------------------+----------------------+--------------+----------+---------+-----------------+----------+----------+
| ID | ATTRS | DEFAULTS | KEEP_KEYS | INS_KEY | INS_VAL | UPDATE_EXISTING | DEL_KEY1 | DEL_KEY2 |
|----+---------------------+----------------------+--------------+----------+---------+-----------------+----------+----------|
| 1 | { | { | [ | material | cotton | True | size | brand |
| | "brand": "Acme", | "currency": "USD", | "color", | | | | | |
| | "color": "red", | "size": "L" | "brand" | | | | | |
| | "size": "M" | } | ] | | | | | |
| | } | | | | | | | |
| 2 | { | { | [ | brand | ZC | False | currency | material |
| | "brand": "ZenCo", | "brand": "ZenCo", | "brand", | | | | | |
| | "color": "blue" | "currency": "EUR", | "currency" | | | | | |
| | } | "size": "M" | ] | | | | | |
| | | } | | | | | | |
+----+---------------------+----------------------+--------------+----------+---------+-----------------+----------+----------+
Déterminer si la carte dans la colonne attrs
contient la clé dans la colonne ins_key
:
SELECT id, MAP_CONTAINS_KEY(ins_key, attrs) AS has_key
FROM demo_maps;
+----+---------+
| ID | HAS_KEY |
|----+---------|
| 1 | False |
| 2 | True |
+----+---------+
La sortie affiche ce qui suit :
La carte dans la colonne
attrs
de la ligne1
ne contient pas la clé (material
) dans la colonneins_key
.La carte dans la colonne
attrs
de la ligne2
contient la clé (brand
) dans la colonneins_key
.