使用 IDENTIFIER() 语法将字面量和变量用作标识符¶
在 Snowflake SQL 语句中,除了按名称引用对象(请参阅 标识符要求)之外,您还可以使用字符串字面量、会话变量、绑定变量或 Snowflake Scripting 变量 来引用对象。例如,可以在 SELECT 语句的 FROM 子句中使用设置为表名称的会话变量。要使用在字面量或变量中指定的对象名称,请使用 IDENTIFIER() 语法。
Using IDENTIFIER() to identify database objects is a best practice because it can make code more reusable and help to prevent SQL injection risks.
语法¶
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 Scripting 变量。
使用说明¶
在某些情况下,需要根据名称识别对象时(查询、DDL、DML 等),可以使用字面量和变量(会话或绑定)。
在同一个查询中,您可以为对象标识符使用绑定变量,还可以为值使用绑定变量。
在 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() 语法¶
以下示例展示了如何将 Snowflake Scripting 变量用于 SELECT 语句中的表名称: