SQL 脚本编写

适用于:勾选“是” Databricks SQL 勾选“是” Databricks Runtime 16.3 及更高版本

可以使用基于 SQL/PSM 标准脚本语法的强大过程逻辑。 任何 SQL 脚本都由 复合语句 块(BEGIN ... END)组成和开头。 复合语句以一个节开头,用于声明局部变量、游标、用户定义的条件和条件处理程序,这些处理程序用于捕获异常。 接下来是复合语句主体,由以下部分组成:

  • 流控制语句包括对谓词表达式的循环、对查询结果的 FOR 循环、 IFCASE 等条件逻辑,以及中断 LEAVEITERATE 等循环的方法。
  • 使用 OPENFETCHCLOSE 语句(Databricks Runtime 18.1 及更高版本)进行游标处理。
  • DDL 语句,例如ALTERCREATEDROP
  • DCL (数据控制) 语句,如 GRANTREVOKE
  • DML 语句INSERTUPDATEDELETEMERGE
  • 查询,用于将结果集返回给脚本调用方。
  • SET 用于设置局部变量和会话变量的语句。
  • EXECUTE IMMEDIATE 语句。
  • 嵌套复合语句,为变量、游标、条件和条件处理程序提供嵌套范围。

在调用方和复合语句之间传递数据

可通过两种方法将数据传入和传出 SQL 脚本:

  • 使用会话变量将标量值或小组数组或映射从一个 SQL 脚本传递到另一个 SQL 脚本。
  • 使用参数标记符将标量值、小型数组集或映射数据从笔记本小组件、Python 或其他语言传递到 SQL 脚本中。

变量和游标范围

可以在复合语句中的任何表达式中引用在复合语句中声明的变量。 Databricks 按照 名称解析中所述的规则,从最内部的范围向外解析标识符。 可以使用可选的复合语句 标签 消除重复 变量名称的歧义。

可以在复合语句中引用在复合语句中OPENFETCH声明的游标以及CLOSE该复合语句中的语句。 与变量一样,可以使用可选的复合语句标签来消除嵌套作用域中重复的游标名称的歧义。

条件处理

SQL 脚本支持条件处理程序,这些处理程序用于截获和处理复合语句或EXIT执行异常CONTINUE(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 执行其语句,然后在引发条件的语句后继续执行该语句。
  • 除非处理程序 SIGNALRESIGNAL 具有自身的条件,否则条件处理程序的结果是执行声明接下来要执行的处理程序的那个复合语句后面的语句。

SQL 存储过程

适用于:已勾选为“是” Databricks SQL 已勾选为“是” Databricks Runtime 17.0及更高版本

使用 CREATE PROCEDURE 语句,可以在 Unity 目录中持久保存 SQL 脚本。 然后,你可以将该过程的访问权授予其他主体。 然后,这些主体可以使用 CALL 语句调用该过程。

注释

通过 Databricks ODBC 驱动程序调用 SQL 存储过程需要 ODBC 驱动程序 2.11 或更高版本。

控制流语句列表

下面是受支持的控制流语句列表:

游标语句列表

Databricks Runtime 18.1 及更高版本中支持以下游标语句。 游标在 复合语句中声明。