【问题标题】:SQLData with spring not working for Oracle SQL Procedure with complex oracle datatype带有 spring 的 SQLData 不适用于具有复杂 oracle 数据类型的 Oracle SQL 过程
【发布时间】:2015-04-24 06:26:51
【问题描述】:

在 Oracle 中,我有如下类型:

create or replace TYPE             "LOCATION_RECORD" AS OBJECT
( PSTL_ADR            ADR_TABLE
 ,GEO_CDE     VARCHAR2(36)
 ,PRMRY_FLG    VARCHAR2(5)
);

create or replace TYPE "LOCATION_TABLE" AS TABLE OF LOCATION_RECORD;
create or replace TYPE             "ADR_RECORD" AS OBJECT
( LN_1_TXT   VARCHAR2(100)
 ,LN_2_TXT   VARCHAR2(100)
)

create or replace TYPE "ADR_TABLE" AS TABLE OF ADR_RECORD;

程序:

PROCEDURE Main(P_LOCATION_TABLE      IN     LOCATION_TABLE    
              ,P_OUTPUT          IN     LOCATION_TABLE );

如何在java中调用这个过程?这是一种特殊情况,其中一个 oracle 类型表包含另一个 oracle 类型表。 我曾尝试使用 SQL 数据实现。它不起作用。 只有当 oracle 类型记录没有表类型作为其参数之一时,它才能通过 java 工作。 但是,当一个 oracle 类型记录具有另一种表类型作为其参数之一时,它不起作用。 如何构造还包含ADR_TABLELOCATION表的STRUCT数组类型?如何获取输出参数?

【问题讨论】:

    标签: java spring oracle stored-procedures


    【解决方案1】:

    考虑使用Spring Data JDBC Extensions

    对你来说方便的类是SqlStructArrayValue,其中arrayTypeName 是你的LOCATION_TABLE,structTypeName - LOCATION_RECORDStructMapper 实现应该为您的值正确填充 StructDescriptor

    对,在这种情况下,您应该再次使用SqlStructArrayValue 作为嵌套对象,因为您的PSTL_ADR 也是ARRAY

    从那里查看该项目的源代码和测试用例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      • 2016-07-21
      • 2015-06-18
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多