2013-09-21 13 views
5
でparam_query

私は、DB2どのようにODBCを使用してアレイを取ってストアドプロシージャを呼び出すために:Erlangの

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;  
[email protected] 

でストアドプロシージャを持っている私は、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'} in function odbc:decode/1(odbc.erl、line 894)

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

答えて

0

整数のリスト(少なくともerlang obdc documentationを参照)のためのOBDCデータ型(少なくとも対応するErlangのもの)はないようです。私は、最終的なクエリは(int配列の構文)のようになりますかわからないが、私は、あなたが文字列としてクエリを作成することによって、あなたが望むものを達成できると思う:

Query = io_lib:format("CALL sum (~p , ~p)",[int_array_syntax([1,2,3,4]),1])

してから使用しますodbc:sql_query(Ref, Query)

0

両方の引数リストに同じ量の引数を入れる必要があると思います。つまり、2番目のリストまたは引数に3つの1を追加します。

odbc:param_query(Ref, "CALL sum (?, ?)", [{sql_integer, [1,2,3,4]}, {sql_integer, out, [1,1,1,1]}]). 
関連する問題