簡體   English   中英

如何將存儲過程參數傳遞給雪花中的游標?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM