CALL¶
调用 存储过程。
语法¶
CALL <procedure_name> ( [ [ <arg_name> => ] <arg> , ... ] )
[ INTO :<snowflake_scripting_variable> ]
必填参数¶
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);
您还可以按其名称指定实参:
CALL sv_proc1(province => 'Manitoba', amount => 127.4);
以下示例演示如何设置 会话变量 并将其作为输入实参传递给存储过程:
SET Variable1 = 49;
CALL sv_proc2($Variable1);
以下是 Snowflake Scripting 块的示例,该块获取 Snowflake Scripting 变量中存储过程的返回值。
DECLARE
ret1 NUMBER;
BEGIN
CALL sv_proc1('Manitoba', 127.4) into :ret1;
RETURN ret1;
END;
注意:如果您在 Python Connector 代码中使用 SnowSQL、Classic Console 或者 execute_stream
或 execute_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;
$$
;
有关创建和调用存储过程的更多示例,请参阅 使用存储过程。