Categorias:

Funções de dados semiestruturados e estruturados (Matriz/objeto)

OBJECT_DELETE

Retorna um objeto com o conteúdo do objeto de entrada (ou seja, fonte) com uma ou mais chaves removidas.

Sintaxe

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

Argumentos

object

O objeto de origem.

key1, key2

Chave a ser omitida do objeto retornado.

Retornos

Esta função retorna um valor do tipo OBJECT.

Notas de uso

Para OBJECTs estruturados:

  • Para os argumentos que são chaves, você deve especificar constantes.

  • Se a chave especificada não fizer parte da definição do tipo OBJECT, a chamada falhará. Por exemplo, a chamada a seguir falha porque o valor OBJECT não contém a chave especificada 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. 
  • A função retorna um valor OBJECT estruturado. O tipo do valor OBJECT exclui a chave excluída. Por exemplo, suponha que você remova a chave city:

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

    A função retorna um valor OBJECT do tipo OBJECT(state VARCHAR), que não inclui a chave city.

    +-----------------+----------------------------+ | NEW_OBJECT | SYSTEM$TYPEOF(NEW_OBJECT) | |-----------------+----------------------------| | { | OBJECT(state VARCHAR)[LOB] | | "state": "CA" | | | } | | +-----------------+----------------------------+ 
  • Se a função remover todas as chaves do valor OBJECT, a função retornará um valor OBJECT estruturado vazio do tipo 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] | +------------+---------------------------+ 

    Quando o tipo de um valor OBJECT estruturado inclui pares chave-valor, os nomes e tipos desses pares são incluídos entre parênteses no tipo (por exemplo, OBJECT(city VARCHAR)). Como um valor OBJECT estruturado vazio não contém pares chave-valor, os parênteses estão vazios.

Exemplos

Essa consulta retorna um objeto que exclui as chaves a e b do objeto de origem:

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

Crie uma tabela e insira linhas com os valores de OBJECT. Este exemplo usa Constantes OBJECT nas instruções INSERT.

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

Consulte a tabela para ver os dados:

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

Para excluir a chave employee_date_of_birth da saída da consulta, execute a seguinte consulta:

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

Para consultar o objeto aninhado employee_contact e remover a chave phone dele, execute a seguinte consulta:

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