java – JDBC使用PL SQL表类型的参数调用Oracle存储过程

我需要对一个参数类型为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();
点赞