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