如何在雪花中参数化存储过程并在 FROM 子句中分配参数

How to parameterize a stored procedure in snowflake and assign parameter in FROM clause

我在snowflake中写了一个存储过程如下:

CREATE OR REPLACE PROCEDURE DEV_NMC_ITEM_AND_PSYCHOMETRIC_DM.STAGE2B."sp_test"("STAGE_S3" VARCHAR(100))
RETURNS VARCHAR(16777216)
LANGUAGE SQL 
EXECUTE AS CALLER
AS '
DECLARE
            Stage_nm_s3 STRING;
              
begin

     truncate table "STAGE2A"."T001_IRF_STUDENT_FORM_S3";

     

COPY INTO "STAGE2A"."T001_IRF_STUDENT_FORM_S3"
FROM ( 
select 

a bunch of columns here........

from @stage2a.:stage_s3)
file_format = ( format_name = F_CSV type=csv)
pattern= ''.*_IRF_.*\.csv'';

我正在尝试在 from 子句中分配输入参数,但它不起作用。我试过大写、小写、双引号和单引号,但其中 none 行得通。任何帮助将不胜感激。

您可以尝试使用立即执行来构建查询和连接过程参数变量。参考下面的例子 -

CREATE OR REPLACE PROCEDURE public.sp_test("STAGE_S3" VARCHAR)
RETURNS VARCHAR(16777216)
LANGUAGE SQL
EXECUTE AS CALLER
AS
$$
DECLARE
Stage_nm_s3 STRING;
begin
execute immediate 'COPY INTO public.TRANS_1 
FROM ( select  from @public.'||:stage_s3||') 
file_format = (type=csv, skip_header=1)';
return 'P';
end;
$$
;
+----------------------------------------+
| status                                 |
|----------------------------------------|
| Function SP_TEST successfully created. |
+----------------------------------------+
select * from trans_1;
+----+
| ID |
|----|
+----+
call sp_test('TEST_STAGE');
+---------+
| SP_TEST |
|---------|
| P       |
+---------+

select * from trans_1;
+------+
|   ID |
|------|
| 1234 |
|    5 |
+------+