IDENTIFIER()構文による識別子としてのリテラルと変数¶
Snowflake SQL ステートメントでは、オブジェクトを名前で参照することに加えて(識別子の要件 を参照)、文字列リテラル、セッション変数、バインド変数、または Snowflakeスクリプト変数 を使用しても、オブジェクトを参照できます。たとえば、 SELECT ステートメントの FROM 句でテーブルの名前に設定されているセッション変数を使用できます。リテラルや変数で指定されたオブジェクト名を使用するには、 IDENTIFIER() 構文を使用します。
IDENTIFIER() を使用してデータベース・オブジェクトを特定することは、コードの再利用性を高め、SQL インジェクション のリスクを防ぐことができるため、ベストプラクティスです。
構文¶
string_literalオブジェクトの名前を識別する文字列です。
文字列は、一重引用符(
'name')で囲むか、ドル記号($name)で始まる必要があります。文字列リテラルには、完全修飾オブジェクト名(
'db_name.schema_name.object_name'または$db_name.schema_name.object_nameなど)を使用できます。
session_variableセッションに設定された SQL 変数 です。
bind_variable?または:variableの形式の バインド変数 です。バインドをサポートするクライアント/プログラムインターフェイス(JDBC 、 ODBC、Pythonなど)で使用できます。snowflake_scripting_variable設定された Snowflakeスクリプト変数。
使用上の注意¶
オブジェクトを名前で識別する必要がある場合(クエリ、 DML、 DDL など)、リテラルや変数(セッションやバインド)を使用できる場合があります。
同じクエリで、オブジェクト識別子にバインド変数を使用し、値にバインド変数を使用できます。
FROM 句では、
TABLE( { string_literal | session_variable | bind_variable | snowflake_scripting_variable } )をIDENTIFIER( { string_literal | session_variable | bind_variable | snowflake_scripting_variable } )の同義語として使用できます。IDENTIFIER() は関数の構文を使っていますが、これは真の関数ではなく、 SHOW FUNCTIONS のようなコマンドでは返されません。
例¶
以下の例では、 IDENTIFIER() 構文を使用しています。
文字列リテラルでの IDENTIFIER() 構文の使用¶
これらの例では、文字列リテラルにオブジェクト識別子が含まれている場合にオブジェクトを参照する方法を示しています。
データベースを作成します。
スキーマを作成します:
完全修飾名を含む文字列で指定された大文字小文字を区別しないテーブル名を使用してテーブルを作成します:
二重引用符で囲まれた文字列で指定された大文字小文字を区別するテーブル名を使用してテーブルを作成します:
スキーマ内のテーブルを表示します:
セッション変数での IDENTIFIER() 構文の使用¶
これらの例では、テーブル名やスキーマ名を持つ セッション変数 の使用方法を示しています。
スキーマ名のセッション変数を設定します:
テーブル名のセッション変数を設定します:
現在のセッションのスキーマを指定します:
テーブルに値を挿入します:
テーブルをクエリします:
この例は、関数名を持つセッション変数の使用方法を示しています。
関数
speed_of_lightを作成します:名前で関数を呼び出します。
IDENTIFIER()構文を使用して関数を呼び出します。
バインド変数での IDENTIFIER() 構文の使用¶
これらの例では、 バインド変数 を使ってオブジェクトを識別する方法を示しています。
この例では、 JDBC で関数名をバインドする方法を示しています。関数の名前は speed_of_light です。
次の例は、バインディングを使用できるさまざまな SQL ステートメントと、バインドできるさまざまなデータベースオブジェクト(スキーマ名やテーブル名を含む)を示しています。
Snowflake Scripting変数での IDENTIFIER() 構文の使用¶
次の例は、 SELECT ステートメントのテーブル名に Snowflake Scripting 変数 を使用する方法を示しています。