gpt4 book ai didi

oracle - 如何从存储过程中使用Grails中的输出参数获取返回值?

转载 作者:行者123 更新时间:2023-12-02 15:53:22 25 4
gpt4 key购买 nike

我有一个存储过程,其输出参数是游标

这是我当前使用的存储过程的代码,我不知道如何获取返回值

def kf_fpy
sql.call("{call calfpy(?,?,?,?,?)}",[workcenter,product,stattime,endtime,Sql.resultSet(OracleTypes.CURSOR)])

{
cursorResults ->
cursorResults.eachRow() {
x ->
kf_fpy = x.getAt('kf_fpy')//ERROR OCCURED
}
}

我收到一个错误“方法引发'java.lang.NullPointerException'异常。无法评估$ Proxy11.toString()”

存储过程:
PROCEDURE CALFPY(workcenter in varchar2,produ in varchar2,stdt in varchar2,etdt in varchar2,p_out out pkg_package.type_cursor)

PKG_PACKAGE:
create or replace
package pkg_package
as
type type_cursor is ref cursor;
type type_record is record
(
kf_ws varchar2(20),
kf_fpy number,
kf_tfpy number,
kf_pro varchar2(200)

);
end;

enter image description here

最佳答案

查看this solution:

过程:

create or replace procedure GRAILS_EXAMPLE
(
v_name IN VARCHAR2,
ref_cur1 IN OUT SYS_REFCURSOR
)
AS
begin

OPEN ref_cur1 FOR
SELECT UPPER(v_name) AS UPPER_NAME
FROM DUAL;

end GRAILS_EXAMPLE;

调用过程的 Controller :
    String upperName;
sql.call("BEGIN GRAILS_EXAMPLE(?,?); END;",
[params.name, Sql.resultSet(OracleTypes.CURSOR)]) {cursorResults ->

if (cursorResults.next()) {
upperName = cursorResults.getAt('UPPER_NAME');
}

}

If you need to get at a field that isn't properly aliased in your proc you can still access it by its index. For example the follow would also work in the above controller:

upperName = cursorResults.getAt(0)


如果您需要从过程中获取更多值,请检查 this answer

关于oracle - 如何从存储过程中使用Grails中的输出参数获取返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35838300/

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