CALL

调用 存储过程

另请参阅:

CREATE PROCEDURESHOW PROCEDURES

语法

CALL <procedure_name> ( [ [ <arg_name> => ] <arg> , ... ] )
  [ INTO :<snowflake_scripting_variable> ]
Copy

必填参数

procedure_name ( [ [ arg_name => ] arg , ... ] )

指定要调用的过程的标识符 (procedure_name) 和任何输入实参。

您可以按名称 (arg_name => arg) 或位置 (arg) 指定输入实参。

请注意以下事项:

  • 必须按名称或位置指定所有实参。不能按名称指定某些实参,也不能按位置指定其他实参。

    按名称指定实参时,不能在实参名称前后使用双引号。

  • 如果两个函数或两个过程的名称相同但实参类型不同,那么在实参名称不同的情况下,可以使用实参名称来指定要执行的函数或过程。请参阅 重载过程和函数

可选参数

INTO :snowflake_scripting_variable

将指定的 Snowflake Scripting 变量 设置为存储过程的返回值。

使用说明

  • 过程名称在架构中不一定是唯一的;存储过程由其实参类型及其名称标识和解析(即存储过程可以重载)。

  • 在 :doc:` Snowflake Scripting 块 </developer-guide/snowflake-scripting/blocks>` 之外,无法使用存储过程返回的值,因为该调用不能成为表达式的一部分。

    在 Snowflake Scripting 块中,可以指定 INTO :snowflake_scripting_variable,以便获取存储过程中 Snowflake Scripting 变量的返回值。

  • 存储过程不是原子的;如果存储过程中的一条语句失败,则存储过程中的其他语句不一定会回滚。有关存储过程和事务的信息,请参阅 事务管理

  • 您还可以使用 CALL(使用匿名过程) 创建和调用匿名过程。

示例

以下示例调用名为 sv_proc1 的存储过程,并传入字符串字面量和数字作为输入实参。此示例按位置指定实参:

CALL sv_proc1('Manitoba', 127.4);
Copy

您还可以按其名称指定实参:

CALL sv_proc1(province => 'Manitoba', amount => 127.4);
Copy

以下示例演示如何设置 会话变量 并将其作为输入实参传递给存储过程:

SET Variable1 = 49;
CALL sv_proc2($Variable1);
Copy

以下是 Snowflake Scripting 块的示例,该块获取 Snowflake Scripting 变量中存储过程的返回值。

DECLARE
  ret1 NUMBER;
BEGIN
  CALL sv_proc1('Manitoba', 127.4) into :ret1;
  RETURN ret1;
END;
Copy

注意:如果您在 Python Connector 代码中使用 SnowSQLClassic Console 或者 execute_streamexecute_string 方法,请改用本示例(请参阅 在 SnowSQL、Classic Console 和 Python Connector 中使用 Snowflake Scripting):

EXECUTE IMMEDIATE $$
DECLARE
  ret1 NUMBER;
BEGIN
  CALL sv_proc1('Manitoba', 127.4) into :ret1;
  RETURN ret1;
END;
$$
;
Copy

有关创建和调用存储过程的更多示例,请参阅 使用存储过程

语言: 中文