Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
雪花JavaScript程序如何从不在阶段中的对象更新字段?_Javascript_Sql_Stored Procedures_Snowflake Cloud Data Platform - Fatal编程技术网

雪花JavaScript程序如何从不在阶段中的对象更新字段?

雪花JavaScript程序如何从不在阶段中的对象更新字段?,javascript,sql,stored-procedures,snowflake-cloud-data-platform,Javascript,Sql,Stored Procedures,Snowflake Cloud Data Platform,我试图在Snowflake上执行一个JavaScript过程,用JavaScript数组中的相关值更新一个表 假设我有下表: 并具有此阵列: var arr = {"gender_value": "Gender", "age_range": "Age Range"} 因此,我更新表格的最终结果是: 我试过这样的方法: var query = " MERGE INTO mytable m

我试图在Snowflake上执行一个JavaScript过程,用JavaScript数组中的相关值更新一个表

假设我有下表:

并具有此阵列:

var arr = {"gender_value": "Gender", "age_range": "Age Range"}
因此,我更新表格的最终结果是:

我试过这样的方法:

var query = "
    MERGE INTO mytable m
    USING (SELECT * FROM "+arr+" )
";

但我认为,如果对象不在某个阶段,就不可能从该对象中进行选择。

您必须用SQL解析数组,才能获得合并的结构。另一种选择是将数组存储在临时表中。但我看不出有任何问题可以解决,请看我的示例:

create or replace table so_test
(
question_name varchar
,answer varchar
,question_label varchar
);

insert into so_test values ('gender_value','Female',null),('age_range','>60',null);

merge into so_test
using 
(
select 
g.key as join_key
,g.value as join_value
from  
(
select parse_json(column1) as arr from values ('{"gender_value": "Gender", "age_range": "Age Range"}') 
) x,
lateral flatten(input => x.arr) g
)src
on so_test.question_name = src.join_key
when matched then update
set question_label = src.join_value;

--proc example
CREATE OR REPLACE PROCEDURE "ARRAY_TEST_SP"(sp_input varchar)
RETURNS VARCHAR(16777216)
LANGUAGE JAVASCRIPT
EXECUTE AS OWNER
AS 
$$
var v_array = SP_INPUT;
var v_merge = `merge into so_test
using 
(
select 
g.key as join_key
,g.value as join_value
from  
(
select parse_json(column1) as arr from values (?) 
) x,
lateral flatten(input => x.arr) g
)src
on so_test.question_name = src.join_key
when matched then update
set question_label = src.join_value;`;
var v_stmt = snowflake.createStatement( 
  {
  sqlText:  v_merge,
  binds:[v_array] 
  }
);
try {
        v_stmt.execute()
        return "Succeeded.";   // Return a success/error indicator.
        }
    catch (err)  {
        return "Failed: " + err;   // Return a success/error indicator.
        }
$$;

call ARRAY_TEST_SP('{"gender_value": "Gender", "age_range": "Age Range"}');  

您必须在SQL中解析数组以获得合并的结构。另一种选择是将数组存储在临时表中。但我看不出有任何问题可以解决,请看我的示例:

create or replace table so_test
(
question_name varchar
,answer varchar
,question_label varchar
);

insert into so_test values ('gender_value','Female',null),('age_range','>60',null);

merge into so_test
using 
(
select 
g.key as join_key
,g.value as join_value
from  
(
select parse_json(column1) as arr from values ('{"gender_value": "Gender", "age_range": "Age Range"}') 
) x,
lateral flatten(input => x.arr) g
)src
on so_test.question_name = src.join_key
when matched then update
set question_label = src.join_value;

--proc example
CREATE OR REPLACE PROCEDURE "ARRAY_TEST_SP"(sp_input varchar)
RETURNS VARCHAR(16777216)
LANGUAGE JAVASCRIPT
EXECUTE AS OWNER
AS 
$$
var v_array = SP_INPUT;
var v_merge = `merge into so_test
using 
(
select 
g.key as join_key
,g.value as join_value
from  
(
select parse_json(column1) as arr from values (?) 
) x,
lateral flatten(input => x.arr) g
)src
on so_test.question_name = src.join_key
when matched then update
set question_label = src.join_value;`;
var v_stmt = snowflake.createStatement( 
  {
  sqlText:  v_merge,
  binds:[v_array] 
  }
);
try {
        v_stmt.execute()
        return "Succeeded.";   // Return a success/error indicator.
        }
    catch (err)  {
        return "Failed: " + err;   // Return a success/error indicator.
        }
$$;

call ARRAY_TEST_SP('{"gender_value": "Gender", "age_range": "Age Range"}');