Snowflake从另一存储过程调用带ARRAY参数的存储过程绑定报错问题
问题根因
Snowflake的SQL执行器不支持直接将原生JavaScript数组作为绑定参数传入,会被识别为未定义的无效参数类型,因此触发报错。
修复方案
把JavaScript数组先序列化为JSON字符串作为绑定值传入,再在SQL语句中通过PARSE_JSON函数将字符串转换为Snowflake原生支持的ARRAY类型即可。
修复后完整代码
CREATE OR REPLACE PROCEDURE Test_DO_WITH_ARR(ARR ARRAY ) RETURNS VARIANT LANGUAGE JAVASCRIPT EXECUTE AS CALLER AS $$ // 可正常操作传入的ARRAY参数,示例直接返回数组验证 return ARR; $$ ; CREATE OR REPLACE PROCEDURE Test_CALL_DO_WITH_ARR() RETURNS VARIANT LANGUAGE JAVASCRIPT EXECUTE AS CALLER AS $$ var Param_ARRAY = ['Gabi','Klaus','Sabine'] ; // 修改点1:SQL中用PARSE_JSON处理绑定参数 // 修改点2:绑定参数传入序列化后的JSON字符串 var stmt = snowflake.execute({ sqlText: "CALL Test_DO_WITH_ARR(PARSE_JSON(:1))", binds: [JSON.stringify(Param_ARRAY)] }); stmt.next() return stmt.getColumnValue(1); $$ ; CALL Test_CALL_DO_WITH_ARR() ;
执行上述代码后会正常返回传入的数组内容:["Gabi","Klaus","Sabine"]。
内容的提问来源于stack exchange,提问作者UMinky
相关产品推荐
相关产品推荐

