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.-à-d. la source) avec une ou plusieurs clés supprimées.

Syntaxe

OBJECT_DELETE( <object>, <key1> [, <key2>, ... ] )
Copy

Arguments

object

L’objet source.

key1, key2

Clé à omettre dans l’objet renvoyé.

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 l’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' );
    
    Copy
    093201 (23001): Function OBJECT_DELETE: expected structured object to contain field zip_code but it did not.
    
  • La fonction renvoie un OBJECT structuré. Le type de l’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$TYPE_OF(new_object);
    
    Copy

    La fonction renvoie un 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 l’objet, elle renvoie un OBJECT structuré vide du type OBJECT().

    SELECT
      OBJECT_DELETE(
        {'state':'CA'}::OBJECT(state VARCHAR),
        'state'
      ) AS new_object,
      SYSTEM$TYPEOF(new_object);
    
    Copy
    +------------+---------------------------+
    | NEW_OBJECT | SYSTEM$TYPEOF(NEW_OBJECT) |
    |------------+---------------------------|
    | {}         | OBJECT()[LOB]             |
    +------------+---------------------------+
    

    Lorsque le type d’un OBJECT structuré 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’un OBJECT structuré vide ne contient aucune paire clé-valeur, les parenthèses sont vides.

Exemples

SELECT OBJECT_DELETE(OBJECT_CONSTRUCT('a', 1, 'b', 2, 'c', 3), 'a', 'b');

-------------------------------------------------------------------+
 OBJECT_DELETE(OBJECT_CONSTRUCT('A', 1, 'B', 2, 'C', 3), 'A', 'B') |
-------------------------------------------------------------------+
 {                                                                 |
   "c": 3                                                          |
 }                                                                 |
-------------------------------------------------------------------+
Copy