java中的oracle Fetch pl/sql数组返回值
在Java中,如何从返回数组的pl/sql
函数中获取值
如果我的pl/sql函数返回名为myArray
的数组,那么在java中是否可以获取值
使用callablestatement
将myArray
转换为java对象
谢谢
更新1
我调用函数的Java代码,但遇到异常
PLS-00306: wrong number or types of arguments in call to 'myfunc'
connection = con.getConnection();
callablestatement = connection.prepareCall("{call myfunc(?,?,?}");
callablestatement.setInt(1, param1);
callablestatement.setInt(2, param2);
callablestatement.setString(3, param3);
callablestatement.registerOutParameter(4, Types.ARRAY);
callablestatement.execute();
resultSet = callablestatement.getArray(4).getResultSet();
更新2
private final String PRODECURE_NAME = "{? = call myfunc(?,?,?)}";
及
connection = con.getConnection();
callablestatement = connection.prepareCall(PRODECURE_NAME);
callablestatement.registerOutParameter(1, Types.ARRAY);
callablestatement.setInt(2, param1);
callablestatement.setInt(3, param2);
callablestatement.setString(4, param3);
callablestatement.execute();
create or replace type dates
is varray(100) of varchar2(32);
功能
CREATE OR REPLACE function myfunc (
p_id IN number,
p_c_id IN number,
p_co_no IN number
)
RETURN dates
AS
myarray contract_dates;
par1 VARCHAR2 (32);
par2 VARCHAR2 (32);
修正更新3
connection = con.getConnection();
callablestatement =
connection.prepareCall("begin ? :=myfunc(?,?,?); end;");
callablestatement.registerOutParameter(1, OracleTypes.ARRAY, "DATES");
callablestatement.setInt(2, param1);
callablestatement.setInt(3, param2);
callablestatement.setString(4, param3);
callablestatement.execute();
# 1 楼答案
我相信您可以使用SerialArray类中的以下方法,它是java的直接后代。sql。数组:
在这里,映射是一个对象及其属性的持有者,该对象及其属性将映射到返回数组中获取的结果集
有关更多详细信息,请参阅http://docs.oracle.com/javase/1.5.0/docs/api/javax/sql/rowset/serial/SerialArray.htmljavadoc
# 2 楼答案
我没有用
ARRAY
来做这件事,但它应该可以工作。首先,必须注册函数的out
参数。所以可以是这样试试这个男人,然后告诉我是不是这样
编辑:
这些是什么表示一个要设置的参数(称为Parameterized)。 因此:
也就是说,你设置了三个参数(?),方法的第一个参数是列索引,第二个参数是特定类型的数据
编辑2:
很抱歉,我编写了错误的解决方案,已经更新了,所以现在检查代码并尝试一下
# 3 楼答案
{a1}包含一整节(16.5),专门用于处理数组。你可能想看看
# 4 楼答案
是的,您需要
registerOutParameter
类型Types.ARRAY
参见示例here
# 5 楼答案
从PL/SQL返回的myArray类型为java。sql。数组。您可以对其调用getArray(),然后键入cast以获得java数组