Snowflake cloud data platform 在选择查询雪花过程中使用变量

Snowflake cloud data platform 在选择查询雪花过程中使用变量,snowflake-cloud-data-platform,snowflake-schema,Snowflake Cloud Data Platform,Snowflake Schema,在下面的过程中,我将一个变量(v_a_类型)传递到选择列表,该变量具有字符串值。当我传递整数值时,它正在接受,但当传递字符串时,它不接受。抛出错误,如无效标识符 下面是程序代码的样子 `CREATE OR REPLACE PROCEDURE CDW_PROC.SAMPLE_PROCEDURE(col1 FLOAT, COL2 VARCHAR, COL3 VARCHAR, COL4 VARCHAR, COL5 VARCHAR, COL6 VARCHAR) RETURNS VARCHAR(10000

在下面的过程中,我将一个变量(v_a_类型)传递到选择列表,该变量具有字符串值。当我传递整数值时,它正在接受,但当传递字符串时,它不接受。抛出错误,如
无效标识符

下面是程序代码的样子

`CREATE OR REPLACE PROCEDURE CDW_PROC.SAMPLE_PROCEDURE(col1 FLOAT, COL2 VARCHAR, COL3 VARCHAR, COL4 VARCHAR, COL5 VARCHAR, COL6 VARCHAR)
RETURNS VARCHAR(10000)
LANGUAGE JAVASCRIPT
STRICT
EXECUTE AS OWNER
AS
$$
try
{

var v_FILTER_ID=0;
var v_A_TYPE=COL2
var v_TYPE=COL3
var v_FILTER_ATTRIBUTE
var v_ORG=COL4;
var v_FILTER_CONDITION,v_FILTER_VALUE,v_FILTER_DESC;
var v_BRAND ='v_BRAND';
var v_F_TIME_CUR = 'v_F_TIME_CUR';
var v_F_TIME_PREV='v_F_TIME_PREV';
var v_F_RANK='v_F_RANK';
var v_F_TIME_BUCKET='v_F_TIME_BUCKET';
var v_CODE='v_CODE';
var v_ID=col1;
var v_TIME_FRAME=COL5;
var v_WK_MTH_FLG=COL6;

var SEL_SQL=snowflake.execute({sqlText: "SELECT ID,TYPE,ORG,SUB_TYPE,FILTER_ID,FILTER_DESC,FILTER_ATTRIBUTE,FILTER_CONDITION,FILTER_VALUE,TIME_FRAME,WK_MTH_FLG FROM CDW_DB.FCT_TABLE  WHERE ID=? AND TYPE =? AND SUB_TYPE =? AND ORG=? AND TIME_FRAME=? AND WK_MTH_FLG =?",binds:[v_ID,v_A_TYPE, v_TYPE, v_ORG, v_TIME_FRAME, v_WK_MTH_FLG]});


while(SEL_SQL.next())
{
var v_ID=SEL_SQL.getColumnValue(1);
var v_A_TYPE=SEL_SQL.getColumnValue(2);
       
v_WORK_SQL = `insert into CDW_DB.TEMP_TABLE1
select DISTINCT  FCT.CUST_ID,
${v_FILTER_ID},
${v_A_TYPE},
RANK() OVER (PARTITION BY FCT.CUST_ID ORDER BY FCT.DT_SK ASC,FCT.CREATEDDATE ASC) AS RNK
from CDW_VW.FCT_TABLE FCT WHERE CUST_ID <> -1
and CALL_DATE_VOD > CURRENT_TIMESTAMP(0) QUALIFY  RNK=1;`;

var v_WORK_SQL_EXEC=snowflake.createStatement({sqlText: v_WORK_SQL});

var VOL2_RESULT=v_WORK_SQL_EXEC.execute();

var RESULT='Success';
return RESULT;
}
  catch(err)
 {
 RESULT="Failed: Code: "+err.code+"\\n State:  "+ err.state;
 RESULT+="\\n  Message:  "+err.message;
 RESULT+="\\n Stack Trace:\\n"+err.StackTraceTxt;
return RESULT;
}
$$
;`
创建或替换过程CDW\u PROC.SAMPLE\u过程(col1 FLOAT、COL2 VARCHAR、COL3 VARCHAR、COL4 VARCHAR、COL5 VARCHAR、COL6 VARCHAR) 返回VARCHAR(10000) 语言JAVASCRIPT 严格的 以所有者身份执行 作为 $$ 尝试 { var v_FILTER_ID=0; 变量v_A_TYPE=COL2 var v_TYPE=COL3 var v_FILTER_属性 var v_ORG=COL4; var v_FILTER_条件、v_FILTER_值、v_FILTER_DESC; var v_BRAND='v_BRAND'; var v_F___时间_CUR='v_F_时间_CUR'; var v_F_TIME_PREV='v_F_TIME_PREV'; var v_F_RANK='v_F_RANK'; var v_F_TIME_BUCKET='v_F_TIME_BUCKET'; var v_CODE='v_CODE'; var v_ID=col1; var v_TIME_FRAME=COL5; var v_WK_MTH_FLG=COL6; var SEL_SQL=snowflake.execute({sqlText:“从CDW_DB.FCT_表中选择ID、TYPE、ORG、SUB_TYPE、FILTER_ID、FILTER_DESC、FILTER_属性、FILTER_条件、FILTER_值、TIME_FRAME、WK_MTH_FLG,其中ID=?和TYPE=?和SUB_TYPE=?和ORG=?和TIME_FRAME=?和WK__MTH FLG=?”,绑定:[v_ID、v_A_类型、v_组织、v_时间框架、v_时间框架、v_FLG]; while(SEL_SQL.next()) { var v_ID=SEL_SQL.getColumnValue(1); var v_A_TYPE=SEL_SQL.getColumnValue(2); v_WORK_SQL=`插入CDW_DB.TEMP_表1 选择不同的FCT.CUST\u ID, ${v_FILTER_ID}, ${v_A_TYPE}, 将(按FCT.DT_SK ASC、FCT.CREATEDDATE ASC按FCT.CUST_ID顺序划分)列为RNK 来自CDW_VW.FCT_表FCT,其中客户ID-1 并调用_DATE_VOD>CURRENT_TIMESTAMP(0)限定RNK=1;`; var v_WORK_SQL_EXEC=snowflake.createStatement({sqlText:v_WORK_SQL}); var VOL2_RESULT=v_WORK_SQL_EXEC.execute(); var RESULT='Success'; 返回结果; } 捕捉(错误) { 结果=“失败:代码:“+err.Code+”\\n状态:“+err.State; 结果+=“\\n消息:”+err.Message; 结果+=“\\n堆栈跟踪:\\n”+err.StackTraceTxt; 返回结果; } $$ ;`
您需要使用单引号:

v_WORK_SQL = `insert into CDW_DB.TEMP_TABLE1
select DISTINCT  FCT.CUST_ID,
${v_FILTER_ID},
'${v_A_TYPE}',
RANK() OVER (PARTITION BY FCT.CUST_ID ORDER BY FCT.DT_SK ASC,FCT.CREATEDDATE ASC) AS RNK
from CDW_VW.FCT_TABLE FCT WHERE CUST_ID <> -1
and CALL_DATE_VOD > CURRENT_TIMESTAMP(0) QUALIFY  RNK=1;`;
v_WORK_SQL=`insert into CDW_DB.TEMP_table 1
选择不同的FCT.CUST\u ID,
${v_FILTER_ID},
“${v_A_TYPE}”,
将(按FCT.DT_SK ASC、FCT.CREATEDDATE ASC按FCT.CUST_ID顺序划分)列为RNK
来自CDW_VW.FCT_表FCT,其中客户ID-1
并调用_DATE_VOD>CURRENT_TIMESTAMP(0)限定RNK=1;`;