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

Posted

技术标签:

【中文标题】雪花传递动态值绑定和常量值【英文标题】:Snowflake pass dynamic value binding and constant value 【发布时间】:2020-04-07 14:52:00 【问题描述】:

我必须将动态值作为我的列名从循环和常量值传递给我的表。我的代码 sn-p 如下所示: 而(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】:

您的程序似乎存在语法错误。请注意如何转义单引号字符。没有看到实际源代码就很难调试它,但这里有一个示例脚本来证明常量值没有什么特别之处:

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 条记录。每行包含:'testing'、'Too long' 和 'secretcol' 值。

从表 1 中选择 *;

【讨论】:

var stmt = snowflake.createStatement( sqlText: insert into table1(column1,column2,column3,column4) select column1,Too Long,``, + columnname + ` from table2 where column1=1 and +column_name += 'abc'` ); stmt.execute(); 需要 sn-p 看起来上面的东西 var stmt = snowflake.createStatement( sqlText: insert into table1(column1,column2,column3,column4) select column1,Too Long,``, + columnname + ` from table2 where column1=1 and +column_name += ' abc'`); stmt.execute();

以上是关于雪花传递动态值绑定和常量值的主要内容,如果未能解决你的问题,请参考以下文章

如何在雪花中以动态值为中心

雪花存储过程变量绑定错误

使用绑定变量在雪花中加载数据

当我在存储过程中使用相同的公式计算日期时,日期值格式不同 - 雪花

在雪花中创建具有动态日期范围的日历表

2022年雪花算法的最大与最小值