Littéraux de table

Les littéraux de table sont utilisés pour transmettre le nom d’une table ou une valeur d’espace réservé (au lieu d’un nom de table) dans une requête. Les littéraux de table apparaissent dans la clause FROM d’une instruction SQL et contiennent soit le nom de la table, soit une variable SQL soit une variable liée à une API au lieu du nom de la table.

De manière informelle, lorsque vous utilisez TABLE(...) pour construire un littéral de table, vous pouvez considérer TABLE() comme une fonction de table. D’un point de vue sémantique, TABLE() ressemble à une fonction. D’un point de vue sémantique, TABLE() se comporte de la même manière qu’une fonction de table, car elle :

  • Accepte une valeur scalaire en entrée.

  • Renvoie un ensemble de 0 ligne ou plus.

  • Peut être utilisée comme source de lignes dans une clause FROM .

Dans ce chapitre :

Syntaxe

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

Une chaîne littérale qui contient un identificateur pour une table :

  • L’identificateur peut être complet sous la forme de :

    db_name.schema_name.table_name
    schema_name.table_name
  • Les guillemets doubles sont pris en charge pour les identificateurs d’objets individuels qui sont sensibles à la casse ou qui contiennent des espaces et des caractères spéciaux.

  • Toute la chaîne d’identificateur doit être délimitée par des guillemets simples ou $$. Par exemple :

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

Une variable SQL qui a été définie pour la session.

bind_variable

Variable de liaison, sous la forme standard de ? ou :name, à utiliser avec des APIs qui prennent en charge les liaisons (Java, Python, etc.).

Notes sur l’utilisation

  • Les littéraux de table ne sont pris en charge que dans la clause FROM.

  • Lorsque TABLE() est pris en charge, cela équivaut à utiliser IDENTIFIER().

  • Lorsqu’une variable de liaison est utilisée pour préparer une instruction, les métadonnées de table ne sont pas disponibles après la préparation de l’instruction.

Exemples

Interroger la table mytable en utilisant un littéral de table (notez que les deux exemples suivants sont syntaxiquement équivalents) :

SELECT * FROM TABLE('mytable');

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

Interroger la table mytable dans le schéma myschema et la base de données mydb en utilisant un littéral de table (notez que les deux exemples suivants sont syntaxiquement équivalents) :

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

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

Définir une variable de session qui fait référence à un nom de table, puis interroger la table en utilisant la variable transmise comme littéral de table :

SET myvar = 'mytable';

SELECT * FROM TABLE($myvar);
Copy

Préparer une instruction avec une liaison qui représente une table (notez que les deux exemples suivants sont syntaxiquement équivalents) :

SELECT * FROM TABLE(?);

SELECT * FROM TABLE(:binding);
Copy