如何使用雪花存储过程将变量数据传递到雪花表中
Posted
技术标签:
【中文标题】如何使用雪花存储过程将变量数据传递到雪花表中【英文标题】:how to pass variant data into snowflake table using snowflake stored procedure 【发布时间】:2021-08-02 16:56:55 【问题描述】:我可以知道。
CREATE
OR REPLACE PROCEDURE abc(
MY_ID STRING,
P_FILTERS VARIANT
) RETURNS VARIANT
LANGUAGE javascript as $$
try
var P_FILTERS=P_FILTERS;
var query=" INSERT INTO abc (SQ_ID,id,\
FILTERS,\
ITERATION)\
VALUES (abc.nextval,\
:1,\
:2,\
0); "
var sql = snowflake.createStatement( sqlText: query,binds:[MY_ID,P_FILTERS] );
var resultSet = sql.execute();
COMMIT;
catch(error)
return (error);
$$;
有人可以帮忙告诉我吗
谢谢, 尼基尔
【问题讨论】:
【参考方案1】:解决方案并不完全简单,但是从变体到字符串再到变体可以解决问题:
create or replace temp table variants as
select 'a'::string id, parse_json('"hello":"world"') v
;
CREATE
OR REPLACE PROCEDURE insert_variant(
MY_ID STRING,
P_FILTERS VARIANT
) RETURNS VARIANT
LANGUAGE JAVASCRIPT as $$
var query="INSERT INTO variants (id, v) select :1, parse_json(:2); "
var sql = snowflake.createStatement(
sqlText: query
, binds:[MY_ID, JSON.stringify(P_FILTERS)]
);
var resultSet = sql.execute();
$$;
call insert_variant('c', parse_json('"hello2":"world3"'))
;
这是因为
目前,只能绑定数字、字符串和 SfDate 类型的 JavaScript 变量。 https://docs.snowflake.com/en/sql-reference/stored-procedures-usage.html#binding-variables
如果尝试在插入的 VALUES() 部分解析 JSON,则会出现错误“VALUES 子句中的表达式无效”。但是使用 INSERT+SELECT 可以解决问题。
【讨论】:
以上是关于如何使用雪花存储过程将变量数据传递到雪花表中的主要内容,如果未能解决你的问题,请参考以下文章
雪花上的 SQL 存储过程将绑定列视为字符串,并且它没有从表中获取其值