根据条件将变量分配给 Snowflake SQL
Assigning variable to Snowflake SQL based on condition
我正在尝试根据在存储过程中作为参数传递的输入变量执行 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_type
被传递到存储过程中,您需要在 JavaScript 的正文中将其大写。
您的连接略有偏差。我强烈建议在 JavaScript 存储过程中为 SQL 使用 JavaScript 文字模板。
用反勾号打开你的字符串,用反勾号关闭。然后,您可以通过像这样包装它来替换任何 JavaScript 变量:${myVariable}。它还允许您在 SQL 中毫无问题地使用单引号和双引号以及 multi-line 语句。
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');
我正在尝试根据在存储过程中作为参数传递的输入变量执行 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_type
被传递到存储过程中,您需要在 JavaScript 的正文中将其大写。
您的连接略有偏差。我强烈建议在 JavaScript 存储过程中为 SQL 使用 JavaScript 文字模板。
用反勾号打开你的字符串,用反勾号关闭。然后,您可以通过像这样包装它来替换任何 JavaScript 变量:${myVariable}。它还允许您在 SQL 中毫无问题地使用单引号和双引号以及 multi-line 语句。
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');