Literais de tabela

Literais de tabela são usados para passar o nome de uma tabela ou um valor de espaço reservado (em vez de um nome de tabela) para uma consulta. Os literais de tabela aparecem na cláusula FROM de uma instrução SQL e consistem no nome da tabela, uma variável SQL ou uma variável de vinculação de API no lugar do nome da tabela.

Informalmente, ao usar TABLE(...) para construir uma literal de tabela, você pode pensar em TABLE() como uma função de tabela. Sintaticamente, TABLE() parece uma função. Semanticamente, TABLE() comporta-se de forma semelhante a uma função de tabela, pois:

  • Aceita um valor escalar como entrada.

  • Retorna um conjunto de 0 ou mais linhas.

  • Pode ser usado como origem de linhas em uma cláusula FROM.

Neste tópico:

Sintaxe

TABLE( { <string_literal> | <session_variable> | <bind_variable> } )
Copy
string_literal

Um literal de cadeia de caracteres que contém um identificador para uma tabela:

  • O identificador pode ser totalmente qualificado na forma de:

    db_name.schema_name.table_name
    schema_name.table_name
  • As aspas duplas são aceitas para identificadores de objetos individuais que diferenciam maiúsculas de minúsculas ou que contêm espaços e caracteres especiais.

  • Toda a cadeia de caracteres do identificador deve ser delimitada por aspas simples ou $$. Por exemplo:

    'mytable' ou $$mytable$$
    'mydb.myschema.mytable' ou $$mydb.myschema.mytable$$
    '"DB 1"."Schema 1".mytable' ou $$"DB 1"."Schema 1".mytable$$
session_variable

A variável SQL que foi definida para a sessão.

bind_variable

Uma variável de vinculação, na forma padrão de ? ou :name, para uso com APIs que aceitam vinculações (Java, Python etc.).

Notas de uso

  • Literais de tabela são aceitos apenas na cláusula FROM.

  • Quando TABLE() é aceito, é equivalente a usar IDENTIFIER().

  • Quando uma variável de vinculação é usada para preparar uma instrução, os metadados da tabela não ficam disponíveis após a preparação da instrução.

Exemplos

Consulte a tabela mytable usando um literal de tabela (observe que os dois exemplos a seguir são sintaticamente equivalentes):

SELECT * FROM TABLE('mytable');

SELECT * FROM TABLE($$mytable$$);
Copy

Consulte a tabela mytable no esquema myschema e banco de dados mydb usando um literal de tabela (observe que os dois exemplos a seguir são sintaticamente equivalentes):

SELECT * FROM TABLE('mydb."myschema"."mytable"');

SELECT * FROM TABLE($$mydb."myschema"."mytable"$$);
Copy

Defina uma variável de sessão que faça referência a um nome de tabela e depois consulte a tabela usando a variável passada como um literal de tabela:

SET myvar = 'mytable';

SELECT * FROM TABLE($myvar);
Copy

Prepare uma instrução com uma vinculação que represente uma tabela (observe que os dois exemplos a seguir são sintaticamente equivalentes):

SELECT * FROM TABLE(?);

SELECT * FROM TABLE(:binding);
Copy