- 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>, ... ] )
Argumente¶
objectDas Quellobjekt.
key1,key2Schlüssel, die aus dem zurückgegebenen Objekt weggelassen werden sollen.
Rückgabewerte¶
Gibt einen Wert vom Typ OBJECT zurück.
Nutzungshinweise¶
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_codeenthält: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.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);
Die Funktion gibt einen OBJECT-Wert vom Typ
OBJECT(state VARCHAR)zurück, der den Schlüsselcitynicht enthält.+-----------------+----------------------------+ | NEW_OBJECT | SYSTEM$TYPEOF(NEW_OBJECT) | |-----------------+----------------------------| | { | OBJECT(state VARCHAR)[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);
+------------+---------------------------+ | 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;
+-----------------+
| 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'
}
};
Fragen Sie die Tabelle ab, um die Daten anzuzeigen:
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 |
| | } |
+----+-------------------------------------------+
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;
+----+-------------------------------+
| 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 |
| | } |
+----+-------------------------------+
Zum Abfragen des employee_contact verschachtelten Objekts entfernen Sie den entsprechenden Schlüssel phone. Um nur die verschachtelten inneren Schlüssel-Wert-Paare zurückzugeben, führen Sie die folgende Abfrage aus:
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" |
| | } |
+----+------------------------+
Zum Abfragen des employee_contact verschachtelten Objekts entfernen Sie den entsprechenden Schlüssel phone. Um das vollständige Objekt statt nur die verschachtelten inneren Schlüssel-Wert-Paare zurückzugeben, führen Sie eine Abfrage aus, die die folgenden Aktionen ausführt:
Rufen Sie die OBJECT_INSERT-Funktion auf, und geben die
ov-Spalte für das erste Argument an. Die Funktion beginnt mit dem gesamten Objekt in jeder Zeile.Für das zweite Argument im OBJECT_INSERT-Aufruf geben Sie
employee_contactfür den zu aktualisierenden vorhandenen Schlüssel an.Für das dritte Argument im OBJECT_INSERT-Aufruf rufen Sie die OBJECT_DELETE-Funktion zum Entfernen des
phone-Schlüssels aus dem verschachtelten Objekt auf.Für das letzte Argument im OBJECT_INSERT-Aufruf geben Sie
truean, um das alte Objekt durch das neue zu ersetzen.
Führen Sie die folgende Abfrage aus, um diese Aktionen durchzuführen:
SELECT id,
OBJECT_INSERT(
ov,
'employee_contact',
OBJECT_DELETE(
ov:employee_contact,
'phone'
),
true
) AS full_object_without_phone
FROM object_delete_example;
+----+-------------------------------------------+
| ID | FULL_OBJECT_WITHOUT_PHONE |
|----+-------------------------------------------|
| 1 | { |
| | "employee_contact": { |
| | "city": "San Mateo", |
| | "state": "CA" |
| | }, |
| | "employee_date_of_birth": "12-10-2003", |
| | "employee_id": 1001 |
| | } |
| 2 | { |
| | "employee_contact": { |
| | "city": "Seattle", |
| | "state": "WA" |
| | }, |
| | "employee_date_of_birth": "01-01-1990", |
| | "employee_id": 1002 |
| | } |
+----+-------------------------------------------+