テーブルリテラル¶
テーブルリテラルは、テーブル名ではなくテーブル名またはプレースホルダー値をクエリに渡すために使用されます。テーブルリテラルは SQL ステートメントの FROM 句に表示され、テーブル名の代わりに、テーブル名または SQL 変数または API バインド変数のいずれかで構成されます。
非公式には、 TABLE(...) を使用してテーブルリテラルを作成する場合、 TABLE() は テーブル関数 のように考えることができます。構文的には、 TABLE() は関数のように見えます。意味的には、 TABLE() は次の理由でテーブル関数と同様に動作します。
入力としてスカラー値を受け入れます。
0以上の行のセットを返します。
FROM 句の行のソースとして使用できます。
このトピックの内容:
構文¶
TABLE( { <string_literal> | <session_variable> | <bind_variable> } )
string_literalテーブルの 識別子 を含む文字列リテラル:
識別子は、次の形式で完全修飾できます。
db_name.schema_name.table_nameschema_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$$);
テーブルリテラルを使用して、スキーマ myschema およびデータベース mydb のテーブル mytable をクエリします(次の2つの例は構文的に同等です)。
SELECT * FROM TABLE('mydb."myschema"."mytable"'); SELECT * FROM TABLE($$mydb."myschema"."mytable"$$);
テーブル名を参照するセッション変数を設定し、テーブルリテラルとして渡された変数を使用してテーブルをクエリします。
SET myvar = 'mytable'; SELECT * FROM TABLE($myvar);
テーブルを表すバインディングを持つステートメントを準備します(次の2つの例は構文的に同等です)。
SELECT * FROM TABLE(?); SELECT * FROM TABLE(:binding);