我在程序中运行查询(使用 Javascript)并将变量传递给 where 条件,得到错误。 请在这里纠正我。
var v='col1' select * from table1 t where t.v='string'
在上面的查询中,我在 where 条件中使用变量而不是列名。
我们如何在这里传递一个变量(t.v
)
谢谢
答案 0 :(得分:0)
您需要使用反引号 (`) 才能使用模板字符串:
create table table1 ( col1 varchar, col2 varchar);
insert into table1 values ('string','Gokhan'), ('int','1');
create or replace procedure test_sp( v varchar)
returns string
language javascript
as
$$
var v=V; // get the param
var result=snowflake.execute({sqlText: `select * from table1 t1 where t1.${v}='string'; ` } );
result.next();
return result.getColumnValue(2);
$$;
call test_sp('col1');
+---------+
| TEST_SP |
+---------+
| Gokhan |
+---------+
基于评论:
CREATE OR REPLACE PROCEDURE SP_TEMP(IN_V VARCHAR) RETURNS VARCHAR(100) LANGUAGE JAVASCRIPT AS
$$ var v_brand ='brand';
var v1='col1' ;
var ALERT_CURSOR=snowflake.execute({sqlText: "SELECT col1,col2 FROM CDW_US_DIMS_DB.FCT_ALERTS_PARAMS_OBR WHERE col1='"+IN_V+"' "});
while(ALERT_CURSOR.next()) { var col1=ALERT_CURSOR.getColumnValue(1); var col2=ALERT_CURSOR.getColumnValue(2);
if (v_brand == 'v_'+col4.trim()) { v_brand=col2; } else {v_brand=col3;}
v_WORK_SQL_ALRT_VOL1 = snowflake.execute({sqlText: "create temporary table CDW_DB.TEMP1(col1 INTEGER,col2 VARCHAR(255),RNK INTEGER);"})
v_WORK_SQL_ALRT_VOL2 = snowflake.execute({sqlText: `insert into CDW_DB.TEMP1 select DISTINCT FCT.COL1,FCT.COL2 , RANK() OVER (PARTITION BY FCT.COL1 ORDER BY FCT.COL2 ASC) AS RNK from CDW_DB.FCT_TBL FCT WHERE COL1 <> -1 and FCT.${v_brand} QUALIFY RNK=1;`});
var v_DROP_VOL_TBL1 =snowflake.execute({sqltext:"DROP TABLE CDW_DB.TEMP1"}); } return v_brand;
$$;