Java Oracle PreparedStatement ARRAY参数传递空字符串

时间:2015-02-25 19:08:22

标签: java arrays oracle prepared-statement

从SQL工作表调用时,以下对流水线函数的调用非常有效。当它从Java作为完整的文字字符串传入时,它也可以很好地工作。

select * from table(PKG.GetStuff(
    param_array => str_arr_t(
        'field1 LIKE ''foo%''', 
        'field2 LIKE ''bar%''')
));

但是如果我尝试使用setArray()在Java中调用调用,我会在oracle函数中获得空字符串。数组计数正确但值为空。

STR_ARR_T在架构上定义为:

create or replace TYPE STR_ARR_T AS TABLE OF varchar2(50);

Java调用是:

PreparedStatement statement = 
    connection.prepareCall("select * from table(PKG.GetStuff(param_array => ?))");
ArrayDescriptor ad1 = ArrayDescriptor.createDescriptor("STR_ARR_T", connection);
ARRAY arr = new ARRAY(ad1, connection, myStringArray);
statement.setArray(1, arr);

函数内的plsql处理数组如下。它正确循环但将空字符串连接到动态sql。

FOR J IN 1 .. param_array.COUNT
LOOP
  sql := sql || ' AND ' || param_array(J);
END LOOP;

在我因为缺少表达式而尝试执行无效的动态sql之前,我没有收到任何错误。

0 个答案:

没有答案