雪花:从另一个过程调用的带有 ARRAY 参数的过程

Posted

技术标签:

【中文标题】雪花:从另一个过程调用的带有 ARRAY 参数的过程【英文标题】:Snowflake: Procedure with ARRAY parameter called from another procedure 【发布时间】:2021-10-31 04:51:06 【问题描述】:

我想将数组绑定到过程中的调用。

我收到以下错误消息:

存储过程 TEST_CALL_DO_WITH_ARR 中的执行错误:无效的绑定参数Gabi、Klaus、Sabine。 错误:绑定参数 2undefined 的类型不受支持在 Snowflake.execute,第 2 行位置 25

CREATE OR REPLACE PROCEDURE Test_DO_WITH_ARR(ARR ARRAY )
RETURNS VARIANT
LANGUAGE javascript
EXECUTE AS CALLER
AS
$$
    // Do something with the Array
    return 'OK' ;
$$
;


CREATE OR REPLACE PROCEDURE Test_CALL_DO_WITH_ARR()
RETURNS VARIANT
LANGUAGE JAVASCRIPT
EXECUTE AS CALLER
AS
$$
    var Param_ARRAY =  ['Gabi','Klaus','Sabine'] ;
    var stmt = snowflake.execute( sqlText: "CALL Test_DO_WITH_ARR(:1)", binds: [Param_ARRAY] );
    return stmt ;
$$
;

CALL Test_CALL_DO_WITH_ARR() ;

【问题讨论】:

【参考方案1】:

目前,JS 中的雪花存储过程仅支持 number、stringSfDate 作为绑定变量,如我们的文档中所述:

https://docs.snowflake.com/en/sql-reference/stored-procedures-usage.html#binding-variables

目前,只有数字、字符串和类型的 JavaScript 变量 SfDate 可以绑定。

解决方法是作为字符串传递,并在内部函数调用中使用 JS 将它们转换为数组。

【讨论】:

以上是关于雪花:从另一个过程调用的带有 ARRAY 参数的过程的主要内容,如果未能解决你的问题,请参考以下文章

带有输入变量的雪花存储过程

如何传递逗号分隔的输入参数以从另一个存储过程调用存储过程

如何在没有临时表的情况下从另一个存储过程调用存储过程(带参数)

如何在雪花中调用另一个存储过程中的存储过程

雪花存储过程变量绑定错误

从另一个存储过程调用具有交叉应用的存储过程会产生错误 SQL 服务器