在雪花过程中传递变量

时间:2021-03-23 07:19:37

标签: snowflake-cloud-data-platform snowflake-schema

我在程序中运行查询(使用 Javascript)并将变量传递给 where 条件,得到错误。 请在这里纠正我。

var v='col1' select * from table1 t where t.v='string'

在上面的查询中,我在 where 条件中使用变量而不是列名。 我们如何在这里传递一个变量(t.v)

谢谢

1 个答案:

答案 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; 
$$;