テーブルリテラル¶
テーブルリテラルは、テーブル名ではなくテーブル名またはプレースホルダー値をクエリに渡すために使用されます。テーブルリテラルは SQL ステートメントの FROM 句に表示され、テーブル名の代わりに、テーブル名または SQL 変数または API バインド変数のいずれかで構成されます。
非公式には、 TABLE(...)
を使用してテーブルリテラルを作成する場合、 TABLE()
は テーブル関数 のように考えることができます。構文的には、 TABLE()
は関数のように見えます。意味的には、 TABLE()
は次の理由でテーブル関数と同様に動作します。
入力としてスカラー値を受け入れます。
0以上の行のセットを返します。
FROM 句の行のソースとして使用できます。
このトピックの内容:
構文¶
TABLE( { <string_literal> | <session_variable> | <bind_variable> } )
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$$);
テーブルリテラルを使用して、スキーマ 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);