카테고리:

반정형 및 정형 데이터 함수 (배열/오브젝트)

OBJECT_DELETE

하나 이상의 키가 제거된 입력(즉, 소스) 오브젝트의 내용을 포함하는 오브젝트를 반환합니다.

구문

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

인자

object

소스 오브젝트입니다.

key1, key2

반환된 오브젝트에서 생략할 키입니다.

반환

이 함수는 OBJECT 형식의 값을 반환합니다.

사용법 노트

정형 OBJECT 의 경우:

  • 키인 인자의 경우 상수를 지정해야 합니다.

  • 지정한 키가 OBJECT 유형 정의에 포함되지 않으면 호출이 실패합니다. 예를 들어, OBJECT 값에 지정된 키 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.
    
  • 이 함수는 정형 OBJECT 값을 반환합니다. OBJECT 값의 유형은 삭제된 키를 제외합니다. 예를 들어, city 키를 제거한다고 가정해 보겠습니다.

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

    이 함수는 city 키가 포함되지 않은 OBJECT(state VARCHAR) 유형의 OBJECT 값을 반환합니다.

    +-----------------+--------------------------------------+
    | NEW_OBJECT      | SYSTEM$TYPEOF(NEW_OBJECT)            |
    |-----------------+--------------------------------------|
    | {               | OBJECT(state VARCHAR(16777216))[LOB] |
    |   "state": "CA" |                                      |
    | }               |                                      |
    +-----------------+--------------------------------------+
    
  • 함수가 OBJECT 값에서 모든 키를 제거하면 함수는 OBJECT() 유형의 빈 정형 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]             |
    +------------+---------------------------+
    

    정형 OBJECT 값의 유형에 키-값 페어가 포함된 경우 해당 페어의 이름과 유형이 유형 괄호 안에 포함됩니다(예: OBJECT(도시 VARCHAR)). 빈 정형 OBJECT 값에는 키-값 페어가 포함되어 있지 않으므로 괄호는 비어 있습니다.

이 쿼리는 소스 오브젝트에서 ab 키가 제외된 오브젝트를 반환합니다.

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

테이블을 만들고 OBJECT 값으로 행을 삽입합니다. 이 예제에서는 INSERT 문에 OBJECT 상수 를 사용합니다.

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

테이블을 쿼리하여 데이터를 확인합니다.

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

쿼리 출력에서 employee_date_of_birth 키를 삭제하려면 다음 쿼리를 실행합니다.

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

employee_contact 중첩된 오브젝트를 쿼리하고 phone 키를 제거하려면 다음 쿼리를 실행합니다.

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"        |
|    | }                      |
+----+------------------------+