为雪花中的所有记录获取相同的值
Getting same value for all records in snowflake
我有 key_value table 和密钥 table。我必须仅从 key_value table 加载密钥并使用雪花程序插入密钥 table 。我写了下面的代码。执行它后,我在键 table 而不是所有键中得到相同的键值。
create or replace procedure proc_key_load()
returns varchar
language javascript
as
$$
var query=`select key from key_value`;
var ret=snowflake.createStatement( {sqlText: query}).execute();
var length=ret.getRowCount();
var counter=0;
while(counter<length){
ret.next();
var value=ret.getColumnValue(1);
var load_query=`insert into key_load values(` + value +`)`;
var ret=snowflake.createStatement( {sqlText: load_query}).execute();
counter += 1;
}
return 'SUCCESS';
$$
我没有测试它,但我看到你在循环中重新定义了“ret”。尝试分配不同的变量:
create or replace procedure proc_key_load()
returns varchar
language javascript
as
$$
var query=`select key from key_value`;
var ret=snowflake.createStatement( {sqlText: query}).execute();
var length=ret.getRowCount();
var counter=0;
while(counter<length){
ret.next();
var value=ret.getColumnValue(1);
var load_query=`insert into key_load values(` + value +`)`;
var ret2 = snowflake.createStatement( {sqlText: load_query}).execute();
counter += 1;
}
return 'SUCCESS';
$$
更新:我测试了上面的代码并且它有效。如果你只需要将一些数据从一个 table 复制到另一个,你可以直接 SQL 对吗?类似于:
INSERT INTO key_load SELECT key FROM key_value;
总之,如果你真的需要使用上面的程序,你可以用更高效的方式来写:
create or replace procedure proc_key_load()
returns varchar
language javascript
as
$$
var query=`select key from key_value`;
var ret=snowflake.createStatement( {sqlText: query}).execute();
while(ret.next()){
var value=ret.getColumnValue(1);
var load_query=`insert into key_load values(?)`;
snowflake.createStatement( {sqlText: load_query, binds:[value] }).execute();
}
return 'SUCCESS';
$$;
我有 key_value table 和密钥 table。我必须仅从 key_value table 加载密钥并使用雪花程序插入密钥 table 。我写了下面的代码。执行它后,我在键 table 而不是所有键中得到相同的键值。
create or replace procedure proc_key_load()
returns varchar
language javascript
as
$$
var query=`select key from key_value`;
var ret=snowflake.createStatement( {sqlText: query}).execute();
var length=ret.getRowCount();
var counter=0;
while(counter<length){
ret.next();
var value=ret.getColumnValue(1);
var load_query=`insert into key_load values(` + value +`)`;
var ret=snowflake.createStatement( {sqlText: load_query}).execute();
counter += 1;
}
return 'SUCCESS';
$$
我没有测试它,但我看到你在循环中重新定义了“ret”。尝试分配不同的变量:
create or replace procedure proc_key_load()
returns varchar
language javascript
as
$$
var query=`select key from key_value`;
var ret=snowflake.createStatement( {sqlText: query}).execute();
var length=ret.getRowCount();
var counter=0;
while(counter<length){
ret.next();
var value=ret.getColumnValue(1);
var load_query=`insert into key_load values(` + value +`)`;
var ret2 = snowflake.createStatement( {sqlText: load_query}).execute();
counter += 1;
}
return 'SUCCESS';
$$
更新:我测试了上面的代码并且它有效。如果你只需要将一些数据从一个 table 复制到另一个,你可以直接 SQL 对吗?类似于:
INSERT INTO key_load SELECT key FROM key_value;
总之,如果你真的需要使用上面的程序,你可以用更高效的方式来写:
create or replace procedure proc_key_load()
returns varchar
language javascript
as
$$
var query=`select key from key_value`;
var ret=snowflake.createStatement( {sqlText: query}).execute();
while(ret.next()){
var value=ret.getColumnValue(1);
var load_query=`insert into key_load values(?)`;
snowflake.createStatement( {sqlText: load_query, binds:[value] }).execute();
}
return 'SUCCESS';
$$;