我正在尝试创建一个存储过程,它将数组作为输入参数,并为数组的每个元素运行一个 select 语句
CREATE OR replace PROCEDURE sproc(PRODUCT array)
RETURNS varchar
LANGUAGE javascript
AS
$$
var query = `SELECT COUNT(*) AS PRODUCT_COUNT FROM FIVETRAN.DBT_EXTERNAL_REPORTING.REVENUE WHERE SITE_ID='ksisk5kZRvk' AND PRODUCT_NAME=:1 ORDER BY 1`;
var i;
var out = "";
var product_count;
for(i = 0; i < PRODUCT.length; i++){
out += PRODUCT[i] ;
var stmt = snowflake.createStatement({sqltext: query, binds: [out]});
var result = stmt.execute();
product_count = stmt.getColumnValue(1)
return product_count;
result.next();
}
return "Done";
$$;
当我像这样运行时
CALL sproc(array_construct('product-annual','product-monthly'));
我收到错误
SQL Error [100183] [P0000]: Execution error in store procedure SPROC:
empty argument passed
At Snowflake.createStatement, line 8 position 29
我想将数组的每个元素传递给我的查询,即产品[0]然后产品[1],但我显然在这里遗漏了一些东西。
我正在尝试创建一个存储过程,它将数组作为输入参数,并为数组的每个元素运行一个 select 语句。绑定变量为空,这就是我收到此错误的原因。为什么我不能将 PRODUCT[i] 作为绑定变量传递?
您代码中的问题是
sqltext
:应该是sqlText
。
那么你需要在呼叫
result.next()
之前先拨打stmt.getColumnValue(1)
。
但是您需要致电
stmt.getColumnValue(1)
,而不是 result.getColumnValue(1)
。