我需要对一个参数类型为PL / SQL表的过程进行JDBC调用.
我正在尝试使用struct对象.但我没有做正确的事情.
我收到错误:
ORA-04043:对象“scott”.“objListStruct”不存在.
这是代码片段:
conn = Application.getDBConnection();
CallableStatement cStmt = null;
cStmt= conn.prepareCall("{call package1.procedure1"+"(?)}");
Struct objListStruct = conn.createStruct("objListStruct",
objNameArr.toArray());
cStmt.setObject(1, objListStruct,Types.STRUCT);
参数“?”对于此过程,是类型:
TYPE t_name IS TABLE OF TABLE1.name%TYPE
任何洞察力使这项工作受到高度赞赏.
谢谢
最佳答案 两件事情:
1)最简单的方法是不将任何东西传递给程序.创建一个全局临时表,插入所需的所有数据,然后调用proc,它从临时表中读取.请注意,您不是自动提交连接.
2)如果必须传入一个数组,则需要下拉并使用Oracle Array类型. Oracle数组类型将绑定到表类型.所以类似的东西(注意:代码没有测试!)到这个:
Object[] arrayObject = { x, y };
ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor(
"MY_SCHEMA.MY_ARRAY_TYPE", conn);
ARRAY myArray = new ARRAY(descriptor, conn, arrayObject);
CallableStatement cs = conn
.prepareCall("{ call package1.procedure1(?)}");
cs.setArray(1, myArray);
cs.execute();
conn.close();