重要
此功能目前以公共预览版提供。
适用于: Databricks Runtime 17.0 及更高版本
调用一个存储过程,按名称识别,并传递参数给过程以及从过程接收参数。
过程调用最多可嵌套 64 个级别。
语法
CALL procedure_name( [ argument [, …] ]
[ namedParameter => argument ] [, ...] )
参数
-
要调用的过程的名称。 过程名称可以选择使用架构名称进行限定。 如果名称未限定,则过程将在当前架构中解析。 如果过程不存在,则会引发错误
ROUTINE_NOT_FOUND
。 -
分配给
IN
参数的参数可以是任何可以转换为该参数类型的表达式或使用DEFAULT
关键字的类型。 对于OUT
参数,INOUT
参数必须是会话变量或局部变量。如果过程失败,则参数的参数值
OUT
INOUT
保持不变。 -
argExpr
将分配到的参数的未限定名称。
参数数不能大于为过程指定的参数数。
如果指定的参数数少于参数,则必须使用 DEFAULT
值定义参数。
例子
> CREATE OR REPLACE PROCEDURE area_of_rectangle
(IN x INT, IN y INT, OUT area INT, INOUT acc INT)
LANGUAGE SQL
SQL SECURITY INVOKER
AS BEGIN
SET area = x * y;
SET acc = acc + area;
SELECT 'Area of rectangle is: ' || area;
END;
-- Session varables to handle OUT and INOUT parameters
> DECLARE area INT;
> DECLARE acc INT DEFAULT 10;
-- Invocation by position
> CALL area_of_rectangle(5, 10, area, acc);
Area of rectangle is: 50
> SELECT area, acc;
area acc
—--- —--
50 60
-- Invocation by name
> CALL area_of_rectangle(y => 10, x => 5, area => area, acc => acc);
Area of rectangle is: 50
> SELECT area, acc;
area acc
—--- —--
50 120