【问题标题】:How to instantiate a StructDescriptor object of a type that is inside in a package如何实例化包中类型的 StructDescriptor 对象
【发布时间】:2018-11-05 03:04:23
【问题描述】:

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

我正在尝试调用使用此类型作为 IN 参数的存储过程,但是当我尝试执行此 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 对象时,在包之外,proccess 可以正确运行。

【问题讨论】:

    标签: java oracle jdbc plsql oracle11g


    【解决方案1】:

    不幸的是,不能在 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");
    

    【讨论】:

      猜你喜欢
      • 2021-01-18
      • 1970-01-01
      • 1970-01-01
      • 2013-11-10
      • 2011-09-15
      • 1970-01-01
      • 2020-07-08
      • 2013-02-15
      • 1970-01-01
      相关资源
      最近更新 更多