DECLARE VARIABLE
适用于: Databricks SQL Databricks Runtime 14.1 及更高版本
创建一个会话专用的临时变量,你可以在任何可以使用常数表达式的位置引用该变量。 还可以将变量与 IDENTIFIER 子句结合使用,在 SQL 语句中将标识符参数化。
使用 SET VARIABLE 语句修改变量。
不能在以下范围内引用临时变量:
- 检查约束
- 生成的列
- 默认表达式
- 持久化 SQL UDF 的正文
- 持久化视图的正文
临时变量也称为会话变量。
语法
DECLARE [ OR REPLACE ] [ VARIABLE ] variable_name
[ data_type ] [ { DEFAULT | = } default_expression ]
参数
OR REPLACE
如果已指定,将替换同名的变量。
-
变量的名称。 该名称可以使用
session
或system.session
进行限定。 除非指定了OR REPLACE
,否则该名称在会话中必须是唯一的。 -
支持的任何数据类型。 如果省略了
data_type
,则必须指定DEFAULT
,并且类型派生自default_expression
。 DEFAULT default_expression 或 = default_expression
定义创建后变量的初始值。
default_expressio
n 必须可强制转换为data_type
。 如果未指定任何默认值,则使用NULL
初始化变量。如果表达式包含一个子查询,Azure Databricks 将引发 INVALID_DEFAULT_VALUE.SUBQUERY_EXPRESSION 错误。
示例
-- Create a variable with a default
> DECLARE VARIABLE myvar INT DEFAULT 5;
> VALUES (myvar);
5
-- Setting a variable
> SET VAR myvar = (SELECT sum(c1) FROM VALUES(1), (2) AS T(c1);
> VALUES (myvar);
3
-- Variables are the outermost scope.
> SELECT myvar, t.myvar, session.myvar FROM VALUES(1) AS T(myvar);
1 1 3
> DROP TEMPORARY VARIABLE myvar;
-- A minimalist variable declaration
> DECLARE myvar = 5;
> VALUES (myvar);
5
-- Using a variable with an IDENTIFIER clause
> DECLARE colname STRING;
> SET VAR colname = 'c1';
> SELECT IDENTIFIER(colname) FROM VALUES(1, 2) AS T(c1, c2);
1
> SET VAR colname = 'c2';
> SELECT IDENTIFIER(colname) FROM VALUES(1, 2) AS T(c1, c2);
2