Kategorien:

Funktionen für semistrukturierte und strukturierte Daten (Array/Objekt)

OBJECT_DELETE

Gibt ein Objekt zurück, das den Inhalt des Eingabeobjekts (d. h. der Quelle) enthält, wobei ein oder mehrere Schlüssel entfernt wurden.

Syntax

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

Argumente

object

Das Quellobjekt.

key1, key2

Schlüssel, der aus dem zurückgegebenen Objekt weggelassen werden soll.

Rückgabewerte

Gibt einen Wert vom Typ OBJECT zurück.

Nutzungshinweise

Bei strukturierten OBJECTs:

  • Für die Argumente, die Schlüssel sind, müssen Sie Konstanten angeben.

  • Wenn der angegebene Schlüssel nicht Teil der OBJECT-Typdefinition ist, schlägt der Aufruf fehl. Der folgende Aufruf schlägt zum Beispiel fehl, weil der OBJECT-Wert nicht den angegebenen Schlüssel zip_code enthält:

    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.
    
  • Die Funktion gibt einen strukturierten OBJECT-Wert zurück. Der Typ des OBJECT-Werts schließt den gelöschten Schlüssel aus. Angenommen, Sie entfernen den Schlüssel city:

    SELECT
      OBJECT_DELETE(
        {'city':'San Mateo','state':'CA'}::OBJECT(city VARCHAR,state VARCHAR),
        'city'
      ) AS new_object,
      SYSTEM$TYPEOF(new_object);
    
    Copy

    Die Funktion gibt einen OBJECT-Wert vom Typ OBJECT(state VARCHAR) zurück, der den Schlüssel city nicht enthält.

    +-----------------+--------------------------------------+
    | NEW_OBJECT      | SYSTEM$TYPEOF(NEW_OBJECT)            |
    |-----------------+--------------------------------------|
    | {               | OBJECT(state VARCHAR(16777216))[LOB] |
    |   "state": "CA" |                                      |
    | }               |                                      |
    +-----------------+--------------------------------------+
    
  • Wenn die Funktion alle Schlüssel aus dem OBJECT-Wert entfernt, gibt die Funktion einen leeren strukturierten OBJECT-Wert vom Typ OBJECT() zurück.

    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]             |
    +------------+---------------------------+
    

    Wenn der Typ eines strukturierten OBJECT-Werts Schlüssel-Wert-Paare enthält, werden die Namen und Typen dieser Paare in Klammern in den Typ aufgenommen (zum Beispiel OBJECT(Stadt VARCHAR)). Da ein leerer strukturierter OBJECT-Wert keine Schlüssel-Wert-Paare enthält, sind die Klammern leer.

Beispiele

Diese Abfrage gibt ein Objekt zurück, das die Schlüssel a und b aus dem Quellobjekt ausschließt:

SELECT OBJECT_DELETE(OBJECT_CONSTRUCT('a', 1, 'b', 2, 'c', 3), 'a', 'b') AS object_returned;
Copy
+-----------------+
| OBJECT_RETURNED |
|-----------------|
| {               |
|   "c": 3        |
| }               |
+-----------------+

Erstellen Sie eine Tabelle und fügen Sie Zeilen mit OBJECT-Werten ein. Dieses Beispiel verwendet OBJECT-Konstanten in den INSERT-Anweisungen.

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'
        }
    };
Copy

Fragen Sie die Tabelle ab, um die Daten anzuzeigen:

SELECT * FROM object_delete_example;
Copy
+----+-------------------------------------------+
| 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                     |
|    | }                                         |
+----+-------------------------------------------+

Um den Schlüssel employee_date_of_birth aus der Abfrageausgabe zu löschen, führen Sie die folgende Abfrage aus:

SELECT id,
       OBJECT_DELETE(ov, 'employee_date_of_birth') AS contact_without_date_of_birth
  FROM object_delete_example;
Copy
+----+-------------------------------+
| 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         |
|    | }                             |
+----+-------------------------------+

Um das verschachtelte Objekt employee_contact abzufragen und den Schlüssel phone daraus zu entfernen, führen Sie die folgende Abfrage aus:

SELECT id,
       OBJECT_DELETE(ov:"employee_contact", 'phone') AS contact_without_phone
  FROM object_delete_example;
Copy
+----+------------------------+
| ID | CONTACT_WITHOUT_PHONE  |
|----+------------------------|
|  1 | {                      |
|    |   "city": "San Mateo", |
|    |   "state": "CA"        |
|    | }                      |
|  2 | {                      |
|    |   "city": "Seattle",   |
|    |   "state": "WA"        |
|    | }                      |
+----+------------------------+