- 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¶
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¶
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' );
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üsselcity
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);
+------------+---------------------------+ | 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 |
| | } |
+----+-------------------------------+
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;
+----+------------------------+
| ID | CONTACT_WITHOUT_PHONE |
|----+------------------------|
| 1 | { |
| | "city": "San Mateo", |
| | "state": "CA" |
| | } |
| 2 | { |
| | "city": "Seattle", |
| | "state": "WA" |
| | } |
+----+------------------------+