首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Spring和StoredProcedure JDBCTemplate从存储过程中获取复杂的用户定义的SQL类型

使用Spring和StoredProcedure JDBCTemplate从存储过程中获取复杂的用户定义的SQL类型
EN

Stack Overflow用户
提问于 2012-10-11 18:22:23
回答 1查看 3K关注 0票数 1

我在从Oracle获取复杂对象类型到Java时遇到了困难。

我使用的是Spring JDBCTemplate和Spring StoredProcedure。

在Oracle端,我使用了一个函数,它返回一个对象(单元),该对象由一个对象(部门)的表(DIVISION_TAB)组成,而该对象本身又由另一个对象(EMPLOYEE)的表(EMPLOYEE_TAB)组成。

这些类型的定义如下:

代码语言:javascript
复制
create or replace TYPE UNIT AS OBJECT 
( 
  UNIT_ID        NUMBER(38),
  UNIT_NAME      VARCHAR(50),
  DIVIVSION_LIST DIVIVSION_TAB
)

create or replace
TYPE DIVISION_TAB
AS TABLE OF DIVISION

create or replace
TYPE DIVISION AS OBJECT 
( 
  DIV_ID        NUMBER(38),
  DIV_NAME      VARCHAR(50),
  DIV_STATUS    NUMBER(38),
  EMPLOYEE_LIST EMPLOYEE_TAB
)

create or replace
TYPE EMPLOYEE_TAB
AS TABLE OF EMPLOYEE

create or replace
    TYPE EMPLOYEE AS OBJECT 
    ( 
      EMP_ID        NUMBER(38),
      EMP_NAME      VARCHAR(50),
      EMP_STATUS    NUMBER(38),
      EMP_SAL       NUMBER(20),
    )

在数据库级别的函数返回一个单元的SQL对象,我在Java中检索它时以下面的方式使用它。

代码语言:javascript
复制
declareParameter(new SqlOutParameter("UNIT", OracleTypes.STRUCT, "UNIT",new SqlReturnType() {
         public Object getTypeValue(CallableStatement callableStatement, int colIndx, int sqlType, String typeName) 
            throws SQLException {
        Connection connection = callableStatement.getConnection();

        Map<String, Class<?>> typeMap = connection.getTypeMap();
        typeMap.put("UNIT", Unit.class);
        typeMap.put("DIVISION_TAB", java.sql.Array.class);
        typeMap.put("DIVISION", Division.class);
        typeMap.put("EMPLOYEE_TAB", java.sql.Array.class);
        typeMap.put("EMPLOYEE", Employee.class);

        STRUCT struct = (STRUCT)callableStatement.getObject(colIndx);
        Object[] attr = struct.getAttributes();
        return attr;
        }
    }));

问题:

代码语言:javascript
复制
        ARRAY array = (ARRAY)attr[3];
    Object[] objects =  (Object[])((ARRAY)attr[3]).getArray();

它抛出SQL Internat异常。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-15 20:18:38

此问题已解决。只是一个简单的错误。代码是完全正确的,我只是错过了对我定义的类型的授权。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12837387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档