存储过程和 UDTFs:调用中遵循的实参名称¶
对存储过程和用户定义的表函数 (UDTFs) 进行调用时,如果调用中包含命名实参,则 Snowflake 会使实参名称优先于实参位置,如下所示。
- 之前:
对具有命名实参的过程或用户定义的表函数 (UDTFs) 进行调用时,Snowflake 会忽略实参名称,而使用实参位置来确定传递给过程或函数的值。
- 现在:
在调用过程和 UDTFs 时,实参名称将优先于实参位置。这可能会导致以下行为,与行为变更之前的行为不同:
以前对存储过程或用户定义的表函数的调用可能会导致错误。
实参名称可能会导致实参的传递顺序与以前不同。这可能会导致错误、错误结果或错误数据插入。
实参名称可能会导致调用具有相同名称的其他存储过程。这可能会导致错误、错误结果或错误数据插入。
下面的示例说明了在变更前后对两个存储过程的调用可能存在哪些不同。
下面的示例说明了在变更前后对两个存储过程的调用可能存在哪些不同。
-- One stored procedure CREATE OR REPLACE PROCEDURE proc(STRARG1 varchar, STRARG2 varchar) RETURNS VARCHAR LANGUAGE SQL AS $$ BEGIN return 'hello'; END $$; -- Another procedure CREATE OR REPLACE PROCEDURE proc(ARG1 number, ARG2 number) RETURNS BOOLEAN LANGUAGE SQL AS $$ BEGIN return ARG1 < ARG2; END $$; -- Example A -- Before: returns 'hello' -- After: returns TRUE CALL PROC(ARG1 => '5', ARG2 => '100'); -- Example B -- Before: returns TRUE -- After: returns 'hello' CALL PROC(STRARG1 => 5, STRARG2 => 100); -- 'hello'.
参考:1017