重要
此功能目前以公共预览版提供。
适用于: Databricks Runtime 17.0 及更高版本
在 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_parameter
指定过程的参数。
-
参数名称在过程中必须是唯一的。
IN、 INOUT 或 OUT
(可选)描述参数的模式。
和
定义仅输入参数。 这是默认值。
INOUT
定义接受输入输出参数的参数。 如果过程完成时未处理错误,它将返回最终参数值作为输出。
外
定义输出参数。 该参数初始化为
NULL
,如果过程完成且未处理错误,它将返回最终参数值作为输出。
-
支持的任何数据类型。
-
函数调用未向参数分配参数时使用的可选默认值。
default_expression
必须可强制转换为data_type
。 表达式不得引用另一个参数或包含子查询。为一个参数指定默认值时,以下所有参数也必须具有默认值。
DEFAULT
不支持用于OUT
参数。 COMMENT 注释
参数的可选说明。
comment
必须是STRING
文本。
-
-
具有 SQL 过程定义的 SQL 复合语句 (
BEGIN ... END
)。当创建过程时,将验证语法的正确性。 在调用过程之前,过程正文不会验证语义正确性。
特征
特征
SQL SECURITY INVOKER
和LANGUAGE 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!