电话

重要

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

适用于:检查标记为是 Databricks Runtime 17.0 及更高版本

调用一个存储过程,按名称识别,并传递参数给过程以及从过程接收参数。

过程调用最多可嵌套 64 个级别。

语法

CALL procedure_name( [ argument [, …] ]
                     [ namedParameter => argument ] [, ...] )

参数

  • procedure_name

    要调用的过程的名称。 过程名称可以选择使用架构名称进行限定。 如果名称未限定,则过程将在当前架构中解析。 如果过程不存在,则会引发错误 ROUTINE_NOT_FOUND

  • 论点

    分配给 IN 参数的参数可以是任何可以转换为该参数类型的表达式或使用 DEFAULT 关键字的类型。 对于 OUT 参数, INOUT 参数必须是会话变量或局部变量。

    如果过程失败,则参数的参数值OUTINOUT保持不变。

  • namedParameter

    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