适用于:
 Databricks SQL 
 Databricks Runtime 14.1 及更高版本
创建一个会话私有临时变量,在可以使用 常量表达式 的地方均可引用该变量。 还可以将变量与 IDENTIFIER 子句结合使用,在 SQL 语句中将标识符参数化。
使用 SET VARIABLE 语句修改变量。
不能在以下范围内引用临时变量:
- 检查约束
 - 生成的列
 - 默认表达式
 - 持久化 SQL UDF 的正文
 - 持久化视图的正文
 
临时变量也称为会话变量。
语法
DECLARE [ OR REPLACE ] [ VARIABLE ] variable_name [, ...]
    [ data_type ] [ { DEFAULT | = } default_expression ]
在 Databricks Runtime 17.2 之前,一次只能指定一个 variable_name 。
参数
或者替换
如果已指定,将替换同名的变量。
- 
变量的名称。 该名称可以使用
session或system.session进行限定。 除非OR REPLACE指定,否则变量名称在会话中必须是唯一的,并且不得复制语句中的其他任何变量名称。 - 
支持的任何数据类型。 如果省略了
data_type,则必须指定DEFAULT,并且类型派生自default_expression。 DEFAULT default_expression 或 = default_expression
定义创建后变量的初始值。
default_expression 必须可强制转换为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
-- Declaring multiple variables
> DECLARE var1, var2 DOUBLE DEFAULT rand();
> VALUES (var1, var2);
 0.3745401188473625  0.3745401188473625
-- 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