适用于: Databricks Runtime 16.3 及更高版本
重要
此功能目前以公共预览版提供。
实现一个 SQL 脚本块,该块可以包含一系列 SQL 语句、流控制语句、局部变量声明和异常处理程序。
注释
从笔记本调用复合语句时,它必须是单元格中唯一的语句。
语法
[ label : ]
BEGIN
[ { declare_variable | declare_condition } ; [...] ]
[ declare_handler ; [...] ]
[ SQL_statement ; [...] ]
END [ label ]
declare_variable
DECLARE variable_name datatype [ DEFAULT default_expr ]
declare_condition
DECLARE condition_name CONDITION [ FOR SQLSTATE [ VALUE ] sqlstate ]
declare_handler
DECLARE handler_type HANDLER FOR condition_values handler_action
handler_type
EXIT
condition_values
{ { SQLSTATE [ VALUE ] sqlstate | condition_name } [, ...] |
{ SQLEXCEPTION | NOT FOUND } [, ...] }
参数
-
可选标识符用于限定在复合语句中定义的变量和退出复合语句。 这两个标签的出现必须一致,并且只有在
END
标签已被指定的情况下,才能指定label:
标签。不能为顶级复合语句指定标签。
NOT ATOMIC
指定,如果复合中的 SQL 语句失败,则不会回滚以前的 SQL 语句。 这是默认行为和唯一行为。
declare_variable
一个或多个变量的局部变量声明
-
变量的名称。 名称不得限定,且在复合语句中是唯一的。
data_type
支持的任何数据类型。 如果省略data_type,则必须指定default,并且类型派生自default_expression。
{ DEFAULT | = } default_expression
定义变量在声明后的初始值。 default_expression 必须可以强制转换为 data_type。 如果未指定默认值,则会使用 NULL 初始化变量。
-
Declare_condition
本地条件声明
-
条件的非限定名称的范围只限在复合语句之内。
sqlstate
一个
STRING
文本,包含由 A-Z 和 0..9 构成的 5 个字母数字字符(不区分大小写)。 SQLSTATE 不得以“00”、“01”或“XX”开头。 从“02”开始的任何 SQLSTATE 也会被预定义的 NOT FOUND 异常捕获。 如果未指定,则 SQLSTATE 为“45000”。
-
declare_handler
错误处理函数的声明。
handler_type
EXIT
处理条件后,分类处理程序以退出复合语句。
condition_values
指定处理程序适用的 SQL状态码或条件。 条件值在复合语句中的所有处理程序中必须是唯一的。 特定条件值优先于
SQLEXCEPTION
.sqlstate
一个
STRING
文本,包含由'A'-'Z'
和'0'-'9'
构成的 5 个字符(不区分大小写)。-
在此复合中定义的条件、外部复合语句或系统定义的错误类。
SQLEXCEPTION
适用于任何面向用户的错误情况。
NOT FOUND
适用于 SQLSTATE“02”类的任何错误条件。
handler_action
在发生任何条件值时要执行的 SQL 语句。 若要添加多个语句,请使用嵌套复合语句。
SQL_statement
SQL 语句,如 DDL、DML、控制语句或复合语句。 任何
SELECT
或VALUES
语句都会生成调用程序可以使用的结果集。
例子
-- A compound statement with local variables, and exit hanlder and a nested compound.
> BEGIN
DECLARE a INT DEFAULT 1;
DECLARE b INT DEFAULT 5;
DECLARE EXIT HANDLER FOR DIVIDE_BY_ZERO
div0: BEGIN
VALUES (15);
END div0;
SET a = 10;
SET a = b / 0;
VALUES (a);
END;
15