我有一个存储过程,其输出参数是游标
这是我目前使用的存储过程的代码,我不知道如何获取返回值
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
}
}
我收到错误“Method threw'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;
答案 0 :(得分:0)
<强>程序强>:
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;
调用程序的控制器:
String upperName;
sql.call("BEGIN GRAILS_EXAMPLE(?,?); END;",
[params.name, Sql.resultSet(OracleTypes.CURSOR)]) {cursorResults ->
if (cursorResults.next()) {
upperName = cursorResults.getAt('UPPER_NAME');
}
}
如果你需要进入你的过程中没有正确别名的字段 你仍然可以通过索引访问它。例如,以下将 也适用于上述控制器:
upperName = cursorResults.getAt(0)
如果您需要更多来自程序的值,请查看this answer。