创建流程

重要

此功能目前以公共预览版提供。

适用于: Databricks Runtime 17.0 及更高版本 仅适用于 Unity Catalog

在 Unity 目录中创建一个过程,该过程采用或修改参数、执行一组 SQL 语句,并选择性地返回结果集。

除了 位置参数调用之外,还可以使用 命名参数调用来调用过程。

语法

CREATE [OR REPLACE] PROCEDURE [IF NOT EXISTS]
    procedure_name ( [ procedure_parameter [, ...] ] )
    [ characteristic [...] ]
    AS compound_statement

procedure_parameter
    [ IN | OUT | INOUT ] parameter_name data_type
    [ DEFAULT default_expression ] [ COMMENT parameter_comment ]

characteristic
  { LANGUAGE SQL |
    SQL SECURITY INVOKER |
    NOT DETERMINISTIC |
    COMMENT procedure_comment |
    MODIFIES SQL DATA ] }

参数

  • 或替换

    如果指定了名称,将替换具有相同名称的过程。 不能将现有函数替换为过程。 不能通过 IF NOT EXISTS 指定此参数。

  • 如果不存在

    如果指定,则仅在具有该注释的过程尚不存在时创建过程。 如果存在同名的过程,则忽略该语句。 不能通过 OR REPLACE 指定此参数。

  • procedure_name

    程序的名称。 可以选择用架构名称来限定程序名称。 如果名称不限定,则会在当前架构中创建永久过程。

    过程名称对于架构中的所有例程(过程和函数)都必须是唯一的。

  • procedure_parameter

    指定过程的参数。

    • parameter_name

      参数名称在过程中必须是唯一的。

    • ININOUTOUT

      (可选)描述参数的模式。

      • 定义仅输入参数。 这是默认值。

      • INOUT

        定义接受输入输出参数的参数。 如果过程完成时未处理错误,它将返回最终参数值作为输出。

      • 定义输出参数。 该参数初始化为 NULL ,如果过程完成且未处理错误,它将返回最终参数值作为输出。

    • 数据类型

      支持的任何数据类型。

    • 默认 default_expression

      函数调用未向参数分配参数时使用的可选默认值。 default_expression 必须可强制转换data_type。 表达式不得引用另一个参数或包含子查询。

      为一个参数指定默认值时,以下所有参数也必须具有默认值。

      DEFAULT 不支持用于 OUT 参数。

    • COMMENT 注释

      参数的可选说明。 comment 必须是 STRING 文本。

  • compound_statement

    具有 SQL 过程定义的 SQL 复合语句 (BEGIN ... END)。

    当创建过程时,将验证语法的正确性。 在调用过程之前,过程正文不会验证语义正确性。

  • 特征

    特征 SQL SECURITY INVOKERLANGUAGE SQL 必需。 所有其他选项都是可选的。 可以按任意顺序指定任意数量的特征,但只能指定每个子句一次。

    • 语言 SQL

      函数实现的语言。

    • SQL SECURITY INVOKER

      指定过程正文中的任何 SQL 语句将在调用该过程的用户的授权下执行。

      在过程正文中解析关系和例程时,Azure Databricks 在调用时使用当前目录和当前架构。

    • 非确定性

      假定过程是不确定的,这意味着它可以在每个调用上返回不同的结果,即使使用相同的参数调用它也是如此。

    • 注释 procedure_comment

      程序的备注。 procedure_comment 必须是 STRING 文本。 默认值为 NULL

    • 修改 SQL 数据

      假设有一个过程来修改 SQL 数据。

例子

-- Demonstrate INOUT and OUT parameter usage.
> CREATE OR REPLACE PROCEDURE add(x INT, y INT, OUT sum INT, INOUT total INT)
    LANGUAGE SQL
    SQL SECURITY INVOKER
    COMMENT 'Add two numbers'
    AS BEGIN
        SET sum = x + y;
        SET total = total + sum;
    END;
> DECLARE sum INT;
> DECLARE total INT DEFAULT 0;
> CALL add(1, 2, sum, total);
> SELECT sum, total;
 3 3
> CALL add(3, 4, sum, total);
 7 10

-- The last executed query is the result set of a procedure
> CREATE PROCEDURE greeting(IN mode STRING COMMENT 'informal or formal')
    LANGUAGE SQL
    SQL SECURITY INVOKER
    AS BEGIN
        SELECT 'Hello!';
        CASE mode WHEN 'informal' THEN SELECT 'Hi!';
                  WHEN 'forma' THEN SELECT 'Pleased to meet you.';
        END CASE;
    END;
> CALL greeting('informal');
  Hi!

> CALL greeting('formal');
  Pleased to meet you.

> CALL greeting('casual');
  Hello!