[英]How can I pass a stored procedure parameter into a cursor in snowflake?
I am currently trying to pass a parameter into a stored procedure and use this parameter when creating a cursor unsuccessfully.我目前正在尝试将参数传递到存储过程中,并在创建游标失败时使用此参数。 Here is a simplified snippet of the code I currently have for creating the stored procedure:这是我目前用于创建存储过程的代码的简化片段:
CREATE OR REPLACE PROCEDURE PROC_MODEL_CREATE_TABLE_PROFILE(TABLE2PROFILE string)
RETURNS TABLE()
LANGUAGE SQL
AS
$$
declare
sql string;
final_sql string;
c1 cursor for (
SELECT
TABLE_NAME as TABLENAME
from TABLE_OF_TABLES
WHERE tablename LIKE ANY (' ||:TABLE2PROFILE|| ')
ORDER BY TABLENAME;
res resultset;
begin
final_sql := '';
for record in c1 do
sql := 'SELECT COUNT(*) AS Number_Of_Rows'
FROM '||record.tablename||';
final_sql := final_sql || sql;
end for;
final_sql := 'create or replace table data_profiles_LATEST as (' || final_sql || ')';
res := (execute immediate :final_sql);
return table(res);
I then call the stored procedure using:然后我使用以下方法调用存储过程:
CALL PROC_MODEL_CREATE_TABLE_PROFILE('TABLE_OF_INTEREST');
However, when this stored procedure is run, it just runs the string ' ||:TABLE2PROFILE||但是,当运行此存储过程时,它只运行字符串 ' ||:TABLE2PROFILE|| ' without passing the parameter. ' 不传递参数。 I can hard code 'TABLE2PROFILE' with 'TABLE_OF_INTEREST' it works fine.我可以用“TABLE_OF_INTEREST”硬编码“TABLE2PROFILE”,它工作正常。 How can I pass a parameter into the stored procedure and use it in the cursor?如何将参数传递到存储过程并在游标中使用?
There are syntactical issue in the code shared.共享代码中存在语法问题。 As I understand you want to pass a multi-valued string, select based on that and then do further operations.据我了解,您想传递一个多值字符串,根据它进行选择,然后进行进一步的操作。
Please refer sample code below that shows same.请参考下面显示相同的示例代码。
Notice how to use multi-values variable for LIKE ANY
.注意如何为LIKE ANY
使用多值变量。
Notice how to use parameter in cursor variable.注意如何在游标变量中使用参数。 Refer this for details on passing parameter to cursor variables.有关将参数传递给游标变量的详细信息,请参阅this 。
CREATE OR REPLACE PROCEDURE PROC_MODEL_CREATE_TABLE_PROFILE(TABLE2PROFILE string)
RETURNS string
LANGUAGE SQL
AS
$$
declare
sql string;
final_sql string;
c1 cursor for
SELECT *
from test_tab
where name like ANY (select value from table(split_to_table(?,',')));
begin
open c1 using (:TABLE2PROFILE);
final_sql := '';
for record in c1 do
sql := 'SELECT '
||record.name||';';
final_sql := final_sql || sql;
end for;
return final_sql;
end;
$$;
Procedure execution -程序执行 -
call PROC_MODEL_CREATE_TABLE_PROFILE('%oh%,%ar%');
PROC_MODEL_CREATE_TABLE_PROFILE PROC_MODEL_CREATE_TABLE_PROFILE |
---|
SELECT John;SELECT Mark;SELECT Gary;选择约翰;选择马克;选择加里; |
Source table used in procedure -过程中使用的源表 -
select * from test_tab limit 1;
ID ID | NAME姓名 | CREATED已创建 |
---|---|---|
1 1 | John约翰 | 14/03/2022 14/03/2022 |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.