Snowflake cloud data platform 根据条件执行存储过程的一部分

Snowflake cloud data platform 根据条件执行存储过程的一部分,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我正在尝试根据加载类型加载到一个表中,即存储过程中作为参数传递的完全加载或增量加载。我以前可以用一行代码尝试替换变量,但下面的代码似乎不起作用- Stored procedure possible arguments: LOAD_TYPE=FULL LOAD_TYPE=INCR var incr_condition = (load_type=='INCR')?"INNER JOIN temp_table" with temp_table( select data fro

我正在尝试根据加载类型加载到一个表中,即存储过程中作为参数传递的完全加载或增量加载。我以前可以用一行代码尝试替换变量,但下面的代码似乎不起作用-

Stored procedure possible arguments:

LOAD_TYPE=FULL
LOAD_TYPE=INCR

var incr_condition = (load_type=='INCR')?"INNER JOIN temp_table"

with temp_table(
select data
from table a
where dt between 01-01-2019 and 09-09-2020
)

select *
from table b
${incr_condition} -- execute only if load_type=INCR
INNER JOIN TABLE C ON B.ID = C.ID

有没有办法限制with子句仅在load_type==INCR时执行?请注意。

我认为条件运算符(问号)除了真部分外,还必须有假部分。否则,当行末尾有分号时,将生成语法错误。这个例子显然没有运行任何东西,但它将返回分配给“out”变量的值,该变量将被运行

由于您使用的是替换变量
${incr\u condition}
,请确保使用反勾号打开和关闭SQL字符串

create or replace procedure foo(LOAD_TYP string)
returns string
language javascript
as
$$

var load_type = LOAD_TYP;

var incr_condition = (load_type === 'INCR') ? "INNER JOIN temp_table" : "";

var out = `
with temp_table(
select data
from table a
where dt between 01-01-2019 and 09-09-2020
)

select *
from table b
${incr_condition} -- execute only if load_type=INCR
INNER JOIN TABLE C ON B.ID = C.ID
`;

return out;

$$;

call foo('INCR'); --Adds the inner join
call foo('FULL'); --Does not add the inner join

我还建议将字符串的比较从
=
更改为
==
。有关原因的详细信息,请参考。

是否将load\u类型传递到存储过程中?如果是这样,您需要将变量大写。是的,它已大写。举个例子,我这里有小写字母。我希望with子句仅在load_type=FULL时执行。对于三元速记,它希望我也有一个else子句。你能帮我走近吗?太好了,格雷格!这正是我几分钟前试过的方法,效果很好。再次感谢您的指导:)