Stored procedures 根据条件为Snowflake SQL分配变量

Stored procedures 根据条件为Snowflake SQL分配变量,stored-procedures,snowflake-cloud-data-platform,Stored Procedures,Snowflake Cloud Data Platform,我正在尝试根据作为存储过程中的参数传递的输入变量执行sql命令。如果传递的参数是INCR,我想将sql的一部分附加到最终的sql查询变量 var exec_cmnd = (load_type == 'INCR') ? "AND EXISTS (SELECT 1 FROM tbl T WHERE inner_tbl.id = outer_tbl.id)" : "1 = 1"; var qry = "`select * from tbl_a w

我正在尝试根据作为存储过程中的参数传递的输入变量执行sql命令。如果传递的参数是INCR,我想将sql的一部分附加到最终的sql查询变量

var exec_cmnd = (load_type == 'INCR') ? "AND EXISTS (SELECT 1 FROM tbl T WHERE inner_tbl.id = outer_tbl.id)" : "1 = 1";  

var qry = "`select * from tbl_a where name=name and `+exec_cmnd+`";

snowflake.execute({sqlText:qry});

但这种情况似乎带来了一个错误。请告诉我如何根据IF条件将变量分配给sql命令查询变量?

如果
load\u type
被传递到存储过程中,则需要在JavaScript主体中使用大写形式

您的连接稍微关闭。我强烈建议在JavaScript存储过程中为SQL使用JavaScript文本模板

用后勾号打开字符串,用后勾号关闭字符串。然后,您可以通过如下方式包装任何JavaScript变量:${myVariable}。它还允许您在SQL中使用单引号、双引号和多行语句,而不会出现问题

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

var exec_cmnd = (LOAD_TYPE == 'INCR') ? "EXISTS (SELECT 1 FROM tbl T WHERE inner_tbl.id = outer_tbl.id)" : "1 = 1";  

var qry = `select * from tbl_a where name=name and ${exec_cmnd}`;

return qry;

$$;

call foo('INCR');

谢谢你,格雷格!这有助于:)