适用于: Databricks SQL
Databricks Runtime 16.3 及更高版本
重要
此功能目前以公共预览版提供。
可以使用基于 SQL/PSM 标准脚本语法的强大过程逻辑。
任何 SQL 脚本都由 复合语句 块(BEGIN ... END
)组成和开头。
复合语句从一个节开始,用于声明局部变量、用户定义的条件和条件处理程序,这些处理程序用于捕获异常。
接下来是复合语句主体,由以下部分组成:
- 流控制语句包括对谓词表达式的循环、对查询结果的 FOR 循环、 IF 和 CASE 等条件逻辑,以及中断 LEAVE 和 ITERATE 等循环的方法。
- DDL 语句,例如
ALTER
,CREATE
DROP
。 - DCL (数据控制)语句,如 GRANT 和 REVOKE。
- DML 语句 INSERT、 UPDATE、 DELETE 和 MERGE。
- 查询将结果集返回给脚本的调用者。
- SET 语句用于设置局部变量和会话变量。
- EXECUTE IMMEDIATE 语句。
- 嵌套复合语句,为变量、条件和条件处理程序提供嵌套范围。
可通过两种方法将数据传入和传出 SQL 脚本:
- 使用会话变量将标量值或小组数组或映射从一个 SQL 脚本传递到另一个 SQL 脚本。
- 使用参数标记符将标量值、小型数组集或映射数据从笔记本小组件、Python 或其他语言传递到 SQL 脚本中。
可以在复合语句中的任何表达式中引用在复合语句中声明的变量。 Databricks 按照 名称解析中所述的规则,从最内部的范围向外解析标识符。 可以使用可选的复合语句 标签 消除重复 变量名称的歧义。
SQL 脚本支持条件处理程序,这些处理程序用于截获和处理处理 SQL 脚本的异常 EXIT
。
在条件处理程序中,可以RESIGNAL原始异常,SIGNAL新异常,或者在不产生异常的情况下退出复合语句。
可以定义条件处理程序来处理三个不同的条件类:
一个或多个命名条件,可以是特定 Databricks 定义的错误类,例如
DIVIDE_BY_ZERO
或用户声明的条件。 这些处理程序处理这些特定条件。一个或多个
SQLSTATE
,可由 Databricks 或用户SIGNAL
语句引发。 这些处理程序可以处理与此SQLSTATE
关联的任何条件。泛型
SQLEXCEPTION
处理程序可以捕获属于SQLEXCEPTION
的所有条件(任何不是SQLSTATE
且不是XX***
的02***
)。
下面用于确定哪些条件处理程序适用于异常。 此条件处理程序称为 最合适的处理程序:
条件处理程序不能应用于定义在自身正文中的任何语句,也不能应用于同一复合语句中声明的任何条件处理程序的正文。
在引发异常的最内部复合语句中定义的适用条件处理程序是适当的。
如果有多个适当的处理程序可用,则最具体的处理程序最合适。 例如,命名条件的处理程序比命名
SQLSTATE
的处理程序更具体。 泛型EXCEPTION
处理程序是最不具体的。
除非处理程序 SIGNAL
或 RESIGNAL
具有自身的条件,否则条件处理程序的结果是执行声明接下来要执行的处理程序的那个复合语句后面的语句。
重要
此功能目前以公共预览版提供。
适用于: Databricks Runtime 17.0 及更高版本
使用 CREATE PROCEDURE 语句,可以在 Unity 目录中持久保存 SQL 脚本。
然后,可以 授予 其他主体访问该过程的权限。 然后,这些主体可以使用 CALL 语句调用该过程。
下面是受支持的控制流语句列表:
- CASE 语句
- BEGIN END 复合语句
- FOR 语句
- GET DIAGNOSTICS 语句
- IF THEN ELSE 语句
- ITERATE 语句
- LEAVE 语句
- LOOP 语句
- REPEAT 语句
- RESIGNAL 语句
- SIGNAL 语句
- while语句
- CREATE PROCEDURE(创建过程)
- 删除过程
- 呼叫