- Catégories :
Fonctions de données semi-structurées et structurées (tableau/objet)
OBJECT_DELETE¶
Renvoie un objet contenant le contenu de l’objet d’entrée (c’est-à-dire la source) avec une ou plusieurs clés supprimées.
Syntaxe¶
OBJECT_DELETE( <object>, <key1> [, <key2>, ... ] )
Arguments¶
object
L’objet source.
key1
,key2
Clé à omettre dans l’objet renvoyé.
Renvoie¶
La fonction renvoie une valeur de type OBJECT.
Notes sur l’utilisation¶
Pour des OBJECTs structurés :
Pour les arguments qui sont des clés, vous devez spécifier des constantes.
Si la clé spécifiée ne fait pas partie de la définition de type OBJECT, l’appel échoue. Par exemple, l’appel suivant échoue, car la valeur OBJECT ne contient pas la clé spécifiée
zip_code
:SELECT OBJECT_DELETE( {'city':'San Mateo','state':'CA'}::OBJECT(city VARCHAR,state VARCHAR), 'zip_code' );
093201 (23001): Function OBJECT_DELETE: expected structured object to contain field zip_code but it did not.
La fonction renvoie une valeur OBJECT structurée. Le type de la valeur OBJECT exclut la clé supprimée. Supposons, par exemple, que vous supprimiez la clé
city
:SELECT OBJECT_DELETE( {'city':'San Mateo','state':'CA'}::OBJECT(city VARCHAR,state VARCHAR), 'city' ) AS new_object, SYSTEM$TYPEOF(new_object);
La fonction renvoie une valeur OBJECT du type
OBJECT(state VARCHAR)
, qui ne comprend pas la clécity
.+-----------------+--------------------------------------+ | NEW_OBJECT | SYSTEM$TYPEOF(NEW_OBJECT) | |-----------------+--------------------------------------| | { | OBJECT(state VARCHAR(16777216))[LOB] | | "state": "CA" | | | } | | +-----------------+--------------------------------------+
Si la fonction supprime toutes les clés de la valeur OBJECT, elle renvoie une valeur OBJECT structurée vide du type
OBJECT()
.SELECT OBJECT_DELETE( {'state':'CA'}::OBJECT(state VARCHAR), 'state' ) AS new_object, SYSTEM$TYPEOF(new_object);
+------------+---------------------------+ | NEW_OBJECT | SYSTEM$TYPEOF(NEW_OBJECT) | |------------+---------------------------| | {} | OBJECT()[LOB] | +------------+---------------------------+
Lorsque le type d’une valeur OBJECT structurée comprend des paires clé-valeur, les noms et les types de ces paires sont inclus entre parenthèses dans le type (par exemple, OBJECT(ville VARCHAR)). Étant donné qu’une valeur OBJECT structurée vide ne contient aucune paire clé-valeur, les parenthèses sont vides.
Exemples¶
Cette requête renvoie un objet qui exclut les clés a
et b
de l’objet source :
SELECT OBJECT_DELETE(OBJECT_CONSTRUCT('a', 1, 'b', 2, 'c', 3), 'a', 'b') AS object_returned;
+-----------------+
| OBJECT_RETURNED |
|-----------------|
| { |
| "c": 3 |
| } |
+-----------------+
Créer une table et insérer des lignes avec les valeurs OBJECT. Cet exemple utilise Constantes OBJECT dans les instructions INSERT.
CREATE OR REPLACE TABLE object_delete_example (
id INTEGER,
ov OBJECT);
INSERT INTO object_delete_example (id, ov)
SELECT
1,
{
'employee_id': 1001,
'employee_date_of_birth': '12-10-2003',
'employee_contact':
{
'city': 'San Mateo',
'state': 'CA',
'phone': '800-555‑0100'
}
};
INSERT INTO object_delete_example (id, ov)
SELECT
2,
{
'employee_id': 1002,
'employee_date_of_birth': '01-01-1990',
'employee_contact':
{
'city': 'Seattle',
'state': 'WA',
'phone': '800-555‑0101'
}
};
Interroger la table pour voir les données :
SELECT * FROM object_delete_example;
+----+-------------------------------------------+
| ID | OV |
|----+-------------------------------------------|
| 1 | { |
| | "employee_contact": { |
| | "city": "San Mateo", |
| | "phone": "800-555‑0100", |
| | "state": "CA" |
| | }, |
| | "employee_date_of_birth": "12-10-2003", |
| | "employee_id": 1001 |
| | } |
| 2 | { |
| | "employee_contact": { |
| | "city": "Seattle", |
| | "phone": "800-555‑0101", |
| | "state": "WA" |
| | }, |
| | "employee_date_of_birth": "01-01-1990", |
| | "employee_id": 1002 |
| | } |
+----+-------------------------------------------+
Pour supprimer la clé employee_date_of_birth
de la sortie de la requête, exécutez la requête suivante :
SELECT id,
OBJECT_DELETE(ov, 'employee_date_of_birth') AS contact_without_date_of_birth
FROM object_delete_example;
+----+-------------------------------+
| ID | CONTACT_WITHOUT_DATE_OF_BIRTH |
|----+-------------------------------|
| 1 | { |
| | "employee_contact": { |
| | "city": "San Mateo", |
| | "phone": "800-555‑0100", |
| | "state": "CA" |
| | }, |
| | "employee_id": 1001 |
| | } |
| 2 | { |
| | "employee_contact": { |
| | "city": "Seattle", |
| | "phone": "800-555‑0101", |
| | "state": "WA" |
| | }, |
| | "employee_id": 1002 |
| | } |
+----+-------------------------------+
Pour interroger l’objet imbriqué employee_contact
et en supprimer la clé phone
, exécutez la requête suivante :
SELECT id,
OBJECT_DELETE(ov:"employee_contact", 'phone') AS contact_without_phone
FROM object_delete_example;
+----+------------------------+
| ID | CONTACT_WITHOUT_PHONE |
|----+------------------------|
| 1 | { |
| | "city": "San Mateo", |
| | "state": "CA" |
| | } |
| 2 | { |
| | "city": "Seattle", |
| | "state": "WA" |
| | } |
+----+------------------------+