[英]How can I pass a stored procedure parameter into a cursor in snowflake?
我目前正在嘗試將參數傳遞到存儲過程中,並在創建游標失敗時使用此參數。 這是我目前用於創建存儲過程的代碼的簡化片段:
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);
然后我使用以下方法調用存儲過程:
CALL PROC_MODEL_CREATE_TABLE_PROFILE('TABLE_OF_INTEREST');
但是,當運行此存儲過程時,它只運行字符串 ' ||:TABLE2PROFILE|| ' 不傳遞參數。 我可以用“TABLE_OF_INTEREST”硬編碼“TABLE2PROFILE”,它工作正常。 如何將參數傳遞到存儲過程並在游標中使用?
共享代碼中存在語法問題。 據我了解,您想傳遞一個多值字符串,根據它進行選擇,然后進行進一步的操作。
請參考下面顯示相同的示例代碼。
注意如何為LIKE ANY
使用多值變量。
注意如何在游標變量中使用參數。 有關將參數傳遞給游標變量的詳細信息,請參閱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;
$$;
程序執行 -
call PROC_MODEL_CREATE_TABLE_PROFILE('%oh%,%ar%');
PROC_MODEL_CREATE_TABLE_PROFILE |
---|
選擇約翰;選擇馬克;選擇加里; |
過程中使用的源表 -
select * from test_tab limit 1;
ID | 姓名 | 已創建 |
---|---|---|
1 | 約翰 | 14/03/2022 |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.