gpt4 book ai didi

oracle - Oracle类型RECORD映射到哪种Java类型?

转载 作者:行者123 更新时间:2023-12-02 14:31:00 27 4
gpt4 key购买 nike

我有一个Grails应用程序,它需要调用Oracle数据库包函数。

该函数的返回值是RECORD Oracle数据类型。
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)
}
}

最佳答案

我的解决方案如下:

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。

关于oracle - Oracle类型RECORD映射到哪种Java类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29979717/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com