雪花传递动态值绑定和常量值

时间:2020-04-07 14:52:00

标签: database snowflake-schema snowflake-task snowflake-pipe snowflake-stream

我必须将动态值作为列名从循环和常量值传递到我的表。我的代码段如下所示: While(res.next()){ var columnname = res.getColumnValue(1); var stmt = insert into table1(column1,column2,column3) select column1,'Too Long', +列名+ from table2; \ var结果= \ snowflake.createStatement(stmt); \执行语句

如果我传递常量值,则将错误作为无效标识符获取。我们如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

您的程序似乎存在语法错误。请注意您如何转义单引号字符。在没有看到实际源代码的情况下很难对其进行调试,但是以下示例脚本演示了常量值没有什么特别之处:

CREATE or REPLACE PROCEDURE TEST( VAR1 VARCHAR)
RETURNS VARCHAR
LANGUAGE JAVASCRIPT
AS '
var columnname = VAR1

for (var i = 0; i< 5; i++){
    var stmt = snowflake.createStatement( { sqlText: "insert into table1(column1,column2,column3) select column1,''Too Long''," + columnname + " from table2" } ); 
    res = stmt.execute();
    }   
return ''YES''
';

要测试上述过程,我创建了两个表,并在table2中插入了一行:

create table table1(column1 varchar,column2 varchar,column3 varchar);

create table table2(column1 varchar,columnX varchar);

insert into table2 values ('testing','secretcol');

我用“ columnX”变量调用该过程,我不想编写更复杂的过程来从第三张表中读取列名:

call test( 'columnX' );

查询table1时,我看到5条记录。每行包含:“测试”,“太长”和“秘密”值。

从表1中选择*;