SQL 变量¶
您可以在 Snowflake 的会话中定义和使用 SQL 变量。
概述¶
Snowflake 支持用户声明的 SQL 变量。它们具有许多用途,例如存储应用程序特定的环境设置。
变量标识符¶
SQL 变量使用不区分大小写的名称进行全局标识。
变量 DDL¶
Snowflake 提供了以下使用 SQL 变量的 DDL 命令:
初始化变量¶
您可以通过执行 SQL 语句 SET 或在连接到 Snowflake 时在连接字符串中设置变量的方式来设置变量。
字符串或二进制变量的大小限制为 256 字节。
使用 SQL 初始化会话中的变量¶
您可以使用 SET 命令在 SQL 中初始化变量。变量的数据类型派生自计算表达式结果的数据类型。以下示例初始化变量:
您可以使用返回单个结果的查询来初始化变量。以下示例使用查询来初始化变量:
您可以在同一语句中初始化多个变量,从而减少与服务器的往返通信次数。以下示例初始化多个变量:
在连接时设置变量¶
除了使用 SET 在会话中设置变量之外,在 Snowflake 中用于初始化会话的连接字符串中,您还可以将变量作为实参传递。如果连接字符串的规范是唯一可能的自定义工具,则此选项特别有用。
例如,使用 Snowflake JDBC 驱动程序,您可以对解释为参数的其他连接属性进行设置。JDBC API 要求 SQL 变量是字符串。
在 SQL 中使用变量¶
可以在 Snowflake 中任何允许使用字面量常量的地方使用变量,文档中注明者除外。若要将它们从绑定值和列名中区分开来,所有变量都必须以 $ 符号为前缀。
例如:
备注
由于 $ 符号是用于标识 SQL 语句中变量的前缀,因此在标识符中使用时将其视为特殊字符。标识符(数据库名称、表名称、列名称等)不能以特殊字符开头,除非整个名称用双引号括起来。有关更多信息,请参阅 对象标识符。
变量还可以包含标识符名称,例如表名称。若要使用变量作为标识符,您必须将其封装在 IDENTIFIER() 中(例如 IDENTIFIER($my_variable))。以下是一些示例:
在 FROM 子句的上下文中,可以将变量名称封装在 TABLE() 中,如下所示:
有关 IDENTIFIER() 的更多信息,请参阅 使用 IDENTIFIER() 语法将字面量和变量用作标识符。
查看会话的变量¶
若要查看当前会话中定义的所有变量,请使用 SHOW VARIABLES 命令:
会话变量函数¶
为操作会话变量提供以下方便使用的函数,以支持与其他数据库系统的兼容性,并通过不支持 $ 语法的工具发出 SQL,以便访问变量。所有这些函数都接受并返回字符串形式的会话变量值:
SYS_CONTEXT 和 SET_SYS_CONTEXT 中的限制
SESSION_CONTEXT 和 SET_SESSION_CONTEXT 中的限制
GETVARIABLE 和 SETVARIABLE 中的限制
以下是使用 GETVARIABLE 的示例。首先,使用 SET 命令定义变量:
返回变量值:
在此示例中,输出是 NULL,因为 Snowflake 存储的变量都是大写字母。
更新大小写:
您可以在 WHERE 子句中使用变量名称,例如:
移除变量¶
SQL 变量是会话专用的。关闭 Snowflake 会话时,将删除会话期间创建的所有变量。这意味着任何人都无法访问已在其他会话中设置的用户定义变量,并且当会话关闭时,这些变量会过期。
此外,还可以使用 UNSET 命令显式删除变量。
例如: