如何在雪花中参数化存储过程并在 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 |
+------+
我在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 |
+------+