【问题标题】:What Java type does the Oracle type RECORD map to?Oracle 类型 RECORD 映射到什么 Java 类型?
【发布时间】:2015-04-30 23:57:30
【问题描述】:

我有一个调用 Oracle 数据库包函数所需的 Grails 应用程序。

函数的返回值为RECORDOracle数据类型。

RECORD 映射到什么 Java Oracle 数据类型?

我找到了this page,但是,我要么是盲人,要么它没有我需要的信息。

示例代码:

包类型声明

TYPE subjectDuration IS RECORD (
  min_duration PLS_INTEGER,
  max_duration PLS_INTEGER
);

功能

FUNCTION getSubjectDuration(
  subject_code IN PACKGE.SUBJ_CODE%type,
  course_number IN PACKGE.CRSE_NUMB%type,
  term_code IN PACKGE.EFF_TERM%type
)
RETURN subjectDuration
IS
  record_rowid ROWID;
  subject_duration subjectDuration;
BEGIN
  ...
  /*function code */

  RETURN(subject_duration);
END;

调用上述函数的 Grails 代码

String packageCheck = "BEGIN packge.getSubjectDuration(:subjectCode, :courseNumber, :termCode); END; "

sql.call(packageCheck, [subjectCode: subjectCode, courseNumber: courseNumber, termCode: termCode],
    // OracleTypes.OTHER is the wrong type. I need the correct type for RECORD, which doesn't exist in OracleTypes.
    Sql.resultSet(OracleTypes.OTHER)) { cursorResults ->         
    if (cursorResults.next()) {
        def result = cursorResults.getAt(0)
        log.debug(result)
    }
}

【问题讨论】:

    标签: oracle grails jdbc sqldatatypes


    【解决方案1】:

    我的解决方案如下:

    import oracle.jdbc.driver.OracleTypes
    ...
    try {
        String packageCheck = "BEGIN csu.swrtcbs.getSubjectDuration(?, ?, ?, ?, ?); END; "
    
        sql.call(packageCheck, [subjectCode, courseNumber, termCode, Sql.out(OracleTypes.NUMBER), Sql.out(OracleTypes.NUMBER)]) { minDur, maxDur ->
    
            //log.debug("From Banner: Min duration: ${minDur}, Max duration: ${maxDur}")
            minDuration = (minDur == null) ? 1 : ((java.math.BigDecimal) minDur).toString()
            maxDuration = (maxDur == null) ? null : ((java.math.BigDecimal) maxDur).toString()
        }
    
        // Do something with the output: minDuration and maxDuration
    
    } catch (Exception e) {
        log.error("Something failed.", e)
    }
    

    sql.call 中将输出指定为Sql.out() 并指定OracleType。

    【讨论】:

      猜你喜欢
      • 2015-02-24
      • 1970-01-01
      • 2011-03-03
      • 2015-02-15
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 2012-06-16
      • 1970-01-01
      相关资源
      最近更新 更多