Tabellenliterale

Tabellenliterale werden verwendet, um den Namen einer Tabelle oder eines Platzhalterwertes (anstelle eines Tabellennamens) an eine Abfrage zu übergeben. Tabellenliterale werden in der FROM-Klausel einer SQL-Anweisung verwendet und bestehen entweder aus dem Tabellennamen oder aus einer SQL-Variablen oder API-Bindungsvariablen anstelle des Tabellennamens.

Wenn Sie TABLE(...) verwenden, um ein Tabellenliteral zu konstruieren, können Sie sich TABLE() wie eine Tabellenfunktion vorstellen. Syntaktisch sieht TABLE() wie eine Funktion aus. Semantisch verhält sich TABLE() aufgrund folgender Eigenschaften ähnlich wie eine Tabellenfunktion:

  • Akzeptiert einen skalaren Wert als Eingabe.

  • Gibt eine Menge von 0 oder mehr Zeilen zurück.

  • Kann als Quelle für Zeilen in einer FROM-Klausel verwendet werden.

Unter diesem Thema:

Syntax

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

Ein Zeichenfolgenliteral, das einen Bezeichner für eine Tabelle enthält:

  • Der Bezeichner kann in folgender Form vollqualifiziert sein:

    db_name.schema_name.table_name
    schema_name.table_name
  • Doppelte Anführungszeichen werden für individuelle Objektbezeichner unterstützt, die Groß-/Kleinschreibung berücksichtigen oder Leerzeichen und Sonderzeichen enthalten.

  • Die gesamte Bezeichnerzeichenfolge muss in einfache Anführungszeichen oder $$ gesetzt werden. Beispiel:

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

Eine SQL-Variable, die für die Sitzung festgelegt wurde.

bind_variable

Eine Bindungsvariable in der Standardform ? oder :name zur Verwendung mit APIs, die Bindungen (Java, Python usw.) unterstützen.

Nutzungshinweise

  • Tabellenliterale werden nur in der FROM-Klausel unterstützt.

  • Wo TABLE() unterstützt wird, entspricht dies der Verwendung von IDENTIFIER().

  • Wenn zur Vorbereitung einer Anweisung eine Bindungsvariable verwendet wird, sind nach der Vorbereitung der Anweisung keine Tabellenmetadaten verfügbar.

Beispiele

Abfrage der Tabelle mytable mit einem Tabellenliteral (beachten Sie, dass die folgenden beiden Beispiele syntaktisch äquivalent sind):

SELECT * FROM TABLE('mytable');

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

Abfrage der Tabelle mytable im Schema myschema und der Datenbank mydb mit einem Tabellenliteral (beachten Sie, dass die folgenden beiden Beispiele syntaktisch äquivalent sind):

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

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

Setzen Sie eine Sitzungsvariable, die auf einen Tabellennamen verweist, und fragen Sie dann die Tabelle mit der als Tabellenliteral übergebenen Variablen ab:

SET myvar = 'mytable';

SELECT * FROM TABLE($myvar);
Copy

Bereiten Sie eine Anweisung mit einer Bindung vor, die eine Tabelle repräsentiert (beachten Sie, dass die folgenden beiden Beispiele syntaktisch äquivalent sind):

SELECT * FROM TABLE(?);

SELECT * FROM TABLE(:binding);
Copy