我在db2中有一个存储过程
create type intArray as integer array[100]@
create or replace procedure sum(in numList intArray, out total integer)
begin
declare i, n integer;
set n = CARDINALITY(numList);
set i = 1;
set total = 100;
while (i <= n) do
set total = total + numList[i];
set i = i + 1;
end while;
end@
我试图通过Erlang odbc:param_query打电话。
odbc:param_query(Ref, "CALL sum (?, ?)", [{sql_integer,[1]}, {sql_integer,out, [1]}]).
以上是给我正确的回报
{executed,1,[{101}]}
但是当我传递多个值为
时 odbc:param_query(Ref, "CALL sum (?, ?)", [{sql_integer,[1,2,3,4]}, {sql_integer,out, [1]}]).
抛出异常
异常退出:{badarg,odbc,param_query,'Params'} 在函数odbc:decode / 1(odbc.erl,第894行)
是否有其他方法可以将列表(Array)传递给存储过程?
答案 0 :(得分:0)
对于整数列表,看起来没有OBDC数据类型(至少对应一个Erlang)(参见erlang obdc documentation)。我不知道最终查询应该是什么样的(int数组的语法),但我认为你可以通过创建一个字符串来实现你想要的东西:
Query = io_lib:format("CALL sum (~p , ~p)",[int_array_syntax([1,2,3,4]),1])
然后使用odbc:sql_query(Ref, Query)
。
答案 1 :(得分:0)
我相信你需要在两个参数列表中都有相同数量的参数,这意味着在你的第二个列表或参数中添加三个1。
odbc:param_query(Ref, "CALL sum (?, ?)", [{sql_integer, [1,2,3,4]}, {sql_integer, out, [1,1,1,1]}]).