2013-09-21 16 views
5

ho una stored procedure in DB2Come chiamata di stored procedure prendendo array utilizzando ODBC: param_query in 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] 

sto provando a chiamare attraverso Erlang ODBC: param_query.

odbc:param_query(Ref, "CALL sum (?, ?)", [{sql_integer,[1]}, {sql_integer,out, [1]}]). 

È possibile che questo mi sta dando una corretta ritorno come

{executed,1,[{101}]} 

Ma quando mi passa più valori come

odbc:param_query(Ref, "CALL sum (?, ?)", [{sql_integer,[1,2,3,4]}, {sql_integer,out, [1]}]). 

E 'un'eccezione

uscita eccezione: {badarg, odbc, param_query, 'Params'} in funzione odbc: decode/1 (odbc.erl, riga 894)

C'è un altro modo per passare un elenco (matrice) alla stored procedure?

risposta

0

Sembra che non vi sia alcun tipo di dati OBDC (almeno con uno Erlang corrispondente) per un elenco di numeri interi (vedere erlang obdc documentation). Io non so come la query finale dovrebbe essere simile (la sintassi per int array), ma penso che si può ottenere ciò che si vuole con la creazione di query come una stringa:

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

e quindi utilizzare odbc:sql_query(Ref, Query).

0

Credo che sia necessario avere una quantità uguale di argomenti in entrambi gli elenchi di argomenti, ovvero aggiungere tre 1 nella seconda lista o argomenti.

odbc:param_query(Ref, "CALL sum (?, ?)", [{sql_integer, [1,2,3,4]}, {sql_integer, out, [1,1,1,1]}]).