Java 如何实例化包中类型的StructDescriptor对象

Java 如何实例化包中类型的StructDescriptor对象,java,oracle,jdbc,plsql,oracle11g,Java,Oracle,Jdbc,Plsql,Oracle11g,我在oracle 12中有一个包,它声明了自己的类型以供不同的存储过程处理,层次结构是: 我试图调用一个将此类型用作参数的存储过程,但当我尝试执行此java代码时: StructDescriptor sd = StructDescriptor.createDescriptor("PKG_ACEPTACION_SOLICITUD.tb_basicos", conexion); ArrayDescriptor ad = ArrayDescriptor.createDescriptor("PKG_A

我在oracle 12中有一个包,它声明了自己的类型以供不同的存储过程处理,层次结构是:

我试图调用一个将此类型用作参数的存储过程,但当我尝试执行此java代码时:

StructDescriptor sd = StructDescriptor.createDescriptor("PKG_ACEPTACION_SOLICITUD.tb_basicos", conexion);
ArrayDescriptor ad = ArrayDescriptor.createDescriptor("PKG_ACEPTACION_SOLICITUD.rg_basicos", conexion);
……例外情况是:

Unable to resolve type "PKG_ACEPTACION_SOLICITUD.tb_basicos"

但是,当我从声明为public的类型创建java对象时,进程在包外正确运行。

不幸的是,不可能在java中使用PL/SQL类型(那些在包中声明的类型)。作为一种解决方法,您应该创建SQL类型:

create type your_type is object (
    prop1 varchar2(10),
    prop2 varchar2(10)
)
并从PL/SQL包中返回它

然后,在Java中,您可以使用
OracleCallableStatement
,如下所示:

OracleCallableStatement cstmt = (OracleCallableStatement)connection.prepareCall("{ ? = call your_package.your_function}"); ;
cstmt.registerOutParameter(1, OracleTypes.JAVA_STRUCT, "YOUR_TYPE");