6

私は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]}]).

例外をスローしています

例外終了: 関数 odbc:decode/1 の {badarg,odbc,param_query,'Params'} (odbc.erl、894 行目)

リスト (配列) をストアド プロシージャに渡す他の方法はありますか?

4

2 に答える 2

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)

于 2013-09-22T05:38:29.150 に答える