wor*_*ork 5 db2 erlang odbc stored-procedures
我在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@
Run Code Online (Sandbox Code Playgroud)
我试图通过Erlang odbc:param_query打电话.
odbc:param_query(Ref, "CALL sum (?, ?)", [{sql_integer,[1]}, {sql_integer,out, [1]}]).
Run Code Online (Sandbox Code Playgroud)
以上是给我正确的回报
{executed,1,[{101}]}
Run Code Online (Sandbox Code Playgroud)
但是当我传递多个值时
odbc:param_query(Ref, "CALL sum (?, ?)", [{sql_integer,[1,2,3,4]}, {sql_integer,out, [1]}]).
Run Code Online (Sandbox Code Playgroud)
这是一个例外
异常退出:函数odbc中的{badarg,odbc,param_query,'Params'}:decode/1(odbc.erl,第894行)
有没有其他方法将列表(数组)传递给存储过程?
看起来整数列表没有 OBDC 数据类型(至少没有相应的 Erlang 数据类型)(请参阅erlang obdc 文档)。我不知道最终的查询应该是什么样子(int 数组的语法),但我认为您可以通过将查询创建为字符串来实现您想要的:
Query = io_lib:format("CALL sum (~p , ~p)",[int_array_syntax([1,2,3,4]),1])
然后使用odbc:sql_query(Ref, Query)
.
归档时间: |
|
查看次数: |
604 次 |
最近记录: |