Javascript 存储过程:传递了空参数

问题描述 投票:0回答:1

我正在尝试创建一个存储过程,它将数组作为输入参数,并为数组的每个元素运行一个 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] 作为绑定变量传递?

(问题来自https://www.reddit.com/r/snowflake/comments/1aljgg9/javascript_stored_procedure_empty_argument_passed/

stored-procedures snowflake-cloud-data-platform
1个回答
0
投票

您代码中的问题是

sqltext
:应该是
sqlText

那么你需要在呼叫

result.next()
之前先拨打
stmt.getColumnValue(1)

但是您需要致电

stmt.getColumnValue(1)
,而不是
result.getColumnValue(1)

© www.soinside.com 2019 - 2024. All rights reserved.