为雪花中的所有记录获取相同的值

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';
$$;