Snowflake 传递动态值绑定和常量值
Snowflake pass dynamic value binding and constant value
我必须将动态值作为我的列名从循环和常量值传递到我的 table。我的代码片段如下所示:
而(res.next()){
var 列名= res.getColumnValue(1);
var stmt= insert into table1(column1,column2,column3)
select column1,'Too Long',
+列名+from table2
;
\var 结果= \snowflake.createStatement(stmt);
\执行语句
如果我传递常量值,则会出现错误,因为标识符无效。我们怎样才能做到这一点?
您的程序似乎存在语法错误。请注意您如何转义单引号字符。在没有看到实际源代码的情况下很难调试它,但这里有一个示例脚本来证明常量值没有什么特别之处:
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''
';
为了测试上面的过程,我创建了两个 tables 并插入一行到 table2:
create table table1(column1 varchar,column2 varchar,column3 varchar);
create table table2(column1 varchar,columnX varchar);
insert into table2 values ('testing','secretcol');
我用 "columnX" 变量调用过程,我不想编写更复杂的过程来读取第 3 个 table:
的列名
call test( 'columnX' );
当我查询 table1 时,我看到 5 条记录。每行包含:'testing'、'Too long' 和 'secretcol' 个值。
select * 来自 table1;
我必须将动态值作为我的列名从循环和常量值传递到我的 table。我的代码片段如下所示:
而(res.next()){
var 列名= res.getColumnValue(1);
var stmt= insert into table1(column1,column2,column3)
select column1,'Too Long',
+列名+from table2
;
\var 结果= \snowflake.createStatement(stmt);
\执行语句
如果我传递常量值,则会出现错误,因为标识符无效。我们怎样才能做到这一点?
您的程序似乎存在语法错误。请注意您如何转义单引号字符。在没有看到实际源代码的情况下很难调试它,但这里有一个示例脚本来证明常量值没有什么特别之处:
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''
';
为了测试上面的过程,我创建了两个 tables 并插入一行到 table2:
create table table1(column1 varchar,column2 varchar,column3 varchar);
create table table2(column1 varchar,columnX varchar);
insert into table2 values ('testing','secretcol');
我用 "columnX" 变量调用过程,我不想编写更复杂的过程来读取第 3 个 table:
的列名call test( 'columnX' );
当我查询 table1 时,我看到 5 条记录。每行包含:'testing'、'Too long' 和 'secretcol' 个值。
select * 来自 table1;