テーブルリテラル¶
テーブルリテラルは、テーブル名ではなくテーブル名またはプレースホルダー値をクエリに渡すために使用されます。テーブルリテラルは SQL ステートメントの FROM 句に表示され、テーブル名、またはテーブル名の代わりに SQL 変数または API バインド変数のいずれかで構成されます。
このトピックの内容:
構文¶
TABLE( { <string_literal> | <session_variable> | <bind_variable> } )
文字列リテラル
テーブルの 識別子 を含む文字列リテラル:
識別子は、次の形式で完全修飾できます。
データベース名.スキーマ名.テーブル名
スキーマ名.テーブル名
二重引用符は、大文字と小文字が区別されるか、スペースと特殊文字を含む個々のオブジェクト識別子に対してサポートされています。
識別子文字列全体を一重引用符または
$$
で囲む必要があります。例:'mytable'
または$$mytable$$
'mydb.myschema.mytable'
または$$mydb.myschema.mytable$$
'"DB 1"."Schema 1".mytable'
または$$"DB 1"."Schema 1".mytable$$
セッション変数
セッションに設定された SQL 変数 です。
バインド変数
バインディング(Java、Pythonなど)をサポートする APIs で使用するための、
?
または:名前
の標準形式のバインド変数です。
使用上の注意¶
テーブルリテラルは 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);