为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8
【操作系统】:win11
【CPU】:
【问题描述】*:有个返回多个结果集的存储过程,在达梦调用中,报错
CREATE OR REPLACE PROCEDURE your_procedure
(
result1 OUT SYS_REFCURSOR,
result2 OUT SYS_REFCURSOR
)
AS
BEGIN
-- 打开第一个结果集
OPEN result1 FOR SELECT top 10 * FROM a表;
-- 打开第二个结果集
OPEN result2 FOR SELECT top 10 * FROM b表;
END;
sql 调试
declare
row1 TD_FACPUSH_APPLY_ITEM%ROWTYPE;
row2 TD_FACPUSH_APPLY_RECORD%ROWTYPE;
result1 SYS_REFCURSOR ;
result2 SYS_REFCURSOR ;
BEGIN
-- 调用存储过程,并接收输出参数
your_procedure( result1, result2);
-- 循环输出结果集1的数据
LOOP
FETCH result1 INTO row1;
EXIT WHEN result1%NOTFOUND; -- 当结果集为空时退出循环
-- 输出数据
DBMS_OUTPUT.PUT_LINE(row1);
END LOOP;
-- 循环输出结果集2的数据
LOOP
FETCH result2 INTO row2;
EXIT WHEN result2%NOTFOUND; -- 当结果集为空时退出循环
-- 输出数据
DBMS_OUTPUT.PUT_LINE(row2);
END LOOP;
-- 关闭结果集
CLOSE result1;
CLOSE result2;
end;
CREATE OR REPLACE PROCEDURE your_procedure
(
result1 OUT SYS_REFCURSOR,
result2 OUT SYS_REFCURSOR
)
AS
BEGIN
-- 打开第一个结果集
OPEN result1 FOR SELECT top 10 * FROM SYS.SYSOBJECTS;
-- 打开第二个结果集
OPEN result2 FOR SELECT top 10 * FROM SYS.SYSOBJECTS;
END;
declare
row1 SYS.SYSOBJECTS%ROWTYPE;
row2 SYS.SYSOBJECTS%ROWTYPE;
result1 SYS_REFCURSOR ;
result2 SYS_REFCURSOR ;
BEGIN
-- 调用存储过程,并接收输出参数
your_procedure( result1, result2);
-- 循环输出结果集1的数据
LOOP
FETCH result1 INTO row1;
EXIT WHEN result1%NOTFOUND; -- 当结果集为空时退出循环
-- 输出数据
DBMS_OUTPUT.enable;
DBMS_OUTPUT.PUT_LINE(row1.name);
END LOOP;
CLOSE result1;
end;
DBMS_OUTPUT.PUT_LINE(row1); --这里有问题,不能直接这样输出一行记录