Categorias:

Funções de dados semiestruturados e estruturados (Extração)

GET

Extrai um valor de um ARRAY ou um OBJECT (ou uma VARIANT que contém um ARRAY ou um OBJECT).

A função retorna NULL se qualquer um dos argumentos for NULL.

Note que esta função não deve ser confundida com o comando GET DML.

Consulte também:

GET_IGNORE_CASE , GET_PATH , :

Sintaxe

ARRAY (ou VARIANT contendo um ARRAY)

GET( <array> , <index> )

GET( <variant> , <index> )
Copy

OBJECT (ou VARIANT contendo um OBJECT)

GET( <object> , <field_name> )

GET( <variant> , <field_name> )
Copy

MAP

GET( <map> , <key> )
Copy

Argumentos

array

Uma expressão que avalia como um ARRAY.

index

Uma expressão que avalia como um INTEGER. Isso especifica a posição do elemento a ser recuperado de ARRAY. A posição é baseada em 0, não em 1.

Se o índice apontar para fora dos limites da matriz, ou se o elemento indexado não existir (em uma matriz esparsa):

  • Se array for uma ARRAY semiestruturada, esta função retornará NULL.

  • Se array for uma ARRAY estruturada, ocorrerá um erro.

variant

Uma expressão que avalia como um VARIANT que contém um ARRAY ou um OBJECT.

object

Uma expressão que avalia como um OBJECT que contém pares chave-valor.

field_name

Uma expressão que avalia como um VARCHAR. Isto especifica a chave em um par chave-valor para o qual você deseja recuperar o valor.

field_name não pode ser uma cadeia de caracteres vazia.

Se object for um OBJECT estruturado, você deverá especificar uma constante para field_name.

Se object não contiver a chave especificada:

  • Se object for um OBJECT semiestruturado, a função retornará NULL.

  • Se object for um OBJECT estruturado, ocorrerá um erro.

map

Uma expressão que avalia como um MAP.

key

A chave em um par chave-valor para o qual você deseja recuperar o valor.

Se map não contiver a chave especificada, a função retornará NULL.

Retornos

  • O valor retornado é o elemento especificado do ARRAY, ou o valor que corresponde à chave especificada de um par chave-valor no OBJECT.

  • Se o objeto de entrada for um OBJECT, ARRAY ou VARIANT semiestruturado, a função retornará um VARIANT. O tipo de dados é VARIANT porque:

    • Em um ARRAY, cada elemento é do tipo VARIANT.

    • Em um OBJECT, o valor em cada par chave-valor é do tipo VARIANT.

  • Se o objeto de entrada for OBJECT estruturado, ARRAY estruturado ou MAP, a função retornará um valor do tipo especificado para o objeto.

    Por exemplo, se o tipo do objeto de entrada for ARRAY(NUMBER), a função retornará NUMBER.

Notas de uso

  • GET aplica a correspondência que diferencia maiúsculas e minúsculas a field_name. Para correspondência que não diferencia maiúsculas e minúsculas, utilize GET_IGNORE_CASE.

  • Se o primeiro parâmetro for do tipo VARIANT:

    • Se o segundo parâmetro for do tipo VARCHAR (por exemplo, um field_name), a função retorna NULL se variant não contiver um OBJECT.

    • Se o segundo parâmetro for do tipo INTEGER (por exemplo, um index), a função retorna NULL se variant não contiver um ARRAY.

Exemplos

Criar uma tabela com dados de amostra:

CREATE TABLE vartab (a ARRAY, o OBJECT, v VARIANT);
INSERT INTO vartab (a, o, v) 
  SELECT
    ARRAY_CONSTRUCT(2.71, 3.14),
    OBJECT_CONSTRUCT('Ukraine', 'Kyiv'::VARIANT, 
                     'France',  'Paris'::VARIANT),
    TO_VARIANT(OBJECT_CONSTRUCT('weatherStationID', 42::VARIANT,
                     'timestamp', '2022-03-07 14:00'::TIMESTAMP_LTZ::VARIANT,
                     'temperature', 31.5::VARIANT,
                     'sensorType', 'indoor'::VARIANT))
    ;
Copy
SELECT a, o, v FROM vartab;
+---------+----------------------+-------------------------------------------------+
| A       | O                    | V                                               |
|---------+----------------------+-------------------------------------------------|
| [       | {                    | {                                               |
|   2.71, |   "France": "Paris", |   "sensorType": "indoor",                       |
|   3.14  |   "Ukraine": "Kyiv"  |   "temperature": 31.5,                          |
| ]       | }                    |   "timestamp": "2022-03-07 14:00:00.000 -0800", |
|         |                      |   "weatherStationID": 42                        |
|         |                      | }                                               |
+---------+----------------------+-------------------------------------------------+
Copy

Extrair o primeiro elemento de um ARRAY:

SELECT GET(a, 0) FROM vartab;
+-----------+
| GET(A, 0) |
|-----------|
| 2.71      |
+-----------+
Copy

Dado o nome de um país, extrair o nome da capital desse país de um OBJECT contendo os nomes dos países e das capitais:

SELECT GET(o, 'Ukraine') FROM vartab;
+-------------------+
| GET(O, 'UKRAINE') |
|-------------------|
| "Kyiv"            |
+-------------------+
Copy

Extrair a temperatura de um VARIANT que contém um OBJECT:

SELECT GET(v, 'temperature') FROM vartab;
+-----------------------+
| GET(V, 'TEMPERATURE') |
|-----------------------|
| 31.5                  |
+-----------------------+
Copy

Para exemplos mais detalhados, consulte Consulta de dados semiestruturados.

Para exemplos de uso de GET com XMLGET, consulte as seções Exemplos e Notas de uso em XMLGET.