テーブルリテラル

テーブルリテラルは、テーブル名ではなくテーブル名またはプレースホルダー値をクエリに渡すために使用されます。テーブルリテラルは SQL ステートメントの FROM 句に表示され、テーブル名の代わりに、テーブル名または SQL 変数または API バインド変数のいずれかで構成されます。

非公式には、 TABLE(...) を使用してテーブルリテラルを作成する場合、 TABLE()テーブル関数 のように考えることができます。構文的には、 TABLE() は関数のように見えます。意味的には、 TABLE() は次の理由でテーブル関数と同様に動作します。

  • 入力としてスカラー値を受け入れます。

  • 0以上の行のセットを返します。

  • FROM 句の行のソースとして使用できます。

このトピックの内容:

構文

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

テーブルの 識別子 を含む文字列リテラル:

  • 識別子は、次の形式で完全修飾できます。

    db_name.schema_name.table_name
    schema_name.table_name
  • 二重引用符は、大文字と小文字が区別されるか、スペースと特殊文字を含む個々のオブジェクト識別子に対してサポートされています。

  • 識別子文字列全体を一重引用符または $$ で囲む必要があります。例:

    'mytable' または $$mytable$$
    'mydb.myschema.mytable' または $$mydb.myschema.mytable$$
    '"DB 1"."Schema 1".mytable' または $$"DB 1"."Schema 1".mytable$$
session_variable

セッションに設定された SQL 変数 です。

bind_variable

バインディング(Java、Pythonなど)をサポートする APIs で使用するための、 ? または :name の標準形式のバインド変数です。

使用上の注意

  • テーブルリテラルは FROM 句でのみサポートされます。

  • TABLE() がサポートされている場合、 IDENTIFIER() を使用するのと同じです。

  • バインド変数を使用してステートメントを準備する場合、ステートメントを準備した後はテーブルメタデータを使用できません。

テーブルリテラルを使用してテーブル mytable をクエリします(次の2つの例は構文的に同等であることに注意してください)。

SELECT * FROM TABLE('mytable');

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

テーブルリテラルを使用して、スキーマ myschema およびデータベース mydb のテーブル mytable をクエリします(次の2つの例は構文的に同等です)。

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

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

テーブル名を参照するセッション変数を設定し、テーブルリテラルとして渡された変数を使用してテーブルをクエリします。

SET myvar = 'mytable';

SELECT * FROM TABLE($myvar);
Copy

テーブルを表すバインディングを持つステートメントを準備します(次の2つの例は構文的に同等です)。

SELECT * FROM TABLE(?);

SELECT * FROM TABLE(:binding);
Copy