使用“ORA-04063:程序包正文”调用成功编译的Oracle程序包时失败…“有错误”
我有一个pkg,用于保存面向报告的代码CMS\u报告 我添加了一个返回ref游标的过程,pkg编译得很好,但调用proc进行测试时失败: ORA-04063:包体CMS.CMS_报告有错误 ORA-06508:PL/SQL:找不到正在调用的程序单元:CMS.CMS\u报告 我已经删除了orig proc,并用它来替换它,以保持简单-同样的问题 过程如下:使用“ORA-04063:程序包正文”调用成功编译的Oracle程序包时失败…“有错误”,oracle,compilation,compiler-errors,package,Oracle,Compilation,Compiler Errors,Package,我有一个pkg,用于保存面向报告的代码CMS\u报告 我添加了一个返回ref游标的过程,pkg编译得很好,但调用proc进行测试时失败: ORA-04063:包体CMS.CMS_报告有错误 ORA-06508:PL/SQL:找不到正在调用的程序单元:CMS.CMS\u报告 我已经删除了orig proc,并用它来替换它,以保持简单-同样的问题 过程如下: procedure test_ref_cur(p_testno in number, p
procedure test_ref_cur(p_testno in number,
p_cur in out ref_cur) as
begin
open p_cur for
select p_testno + 1 from dual;
end test_ref_cur;
我在pkg规范中定义了ref游标,如下所示:
type ref_cur is ref cursor;
procedure test_ref_cur(p_testno in number,
p_cur in out ref_cur);
我尝试过使用ref cursor和sys_refcursor的各种组合,但都会出现相同的错误。如果我从pkg中删除proc,它可以正常工作
我开始认为这是一个系统问题
还有其他人有这个问题吗
问候
Dave很难说问题出在哪里,因为我们似乎没有看到相关的代码 因此,我建议您仔细检查以下几点: 包和包体都存在,并且实际上编译时没有异常 您位于包含包和包体的架构/用户中 没有具有相同名称的其他对象可能会隐藏您的包/包体 您尝试调用的过程存在于包和包体中 删除包+包体中的所有代码,除了一个简单的过程,并检查其是否有效
如果您已经完成了所有这些,请使用结果更新问题。为了实现您想要的结果,您必须使用SYS\u REFCURSOR:
create procedure test_ref_cur(p_testno in number,
p_cur in out SYS_REFCURSOR) as
begin
open p_cur for
select p_testno + 1 from dual;
end test_ref_cur;
-- PROCEDURE TEST_REF_CUR compiled
。。。例如:
DECLARE
l_sysrc SYS_REFCURSOR;
l_num NUMBER;
procedure test_ref_cur(p_testno in number,
p_cur in out SYS_REFCURSOR) as
begin
open p_cur for
select p_testno + 1 from dual;
end test_ref_cur;
BEGIN
test_ref_cur(1, l_sysrc);
FETCH l_sysrc INTO l_num;
DBMS_OUTPUT.PUT_LINE(l_num);
END;
-- Result:
-- 2
从Oracle 7.3开始,REF游标类型就可以允许
从存储过程和函数返回的记录集。神谕
9i引入了预定义的SYS_REFCURSOR类型,这意味着我们不再
必须定义我们自己的引用游标类型
来源:您如何知道该软件包是否编译?我见过一些工具设置,它们看起来都很好,但是包实际上没有被编译,所以只有在明确编译或启动时,才会出现问题。显示错误会给您带来什么,或者如果您的客户端不支持,请从user_errors中选择*,其中键入“PACKAGE%”,name=“CMS_REPORTS”?你所展示的对我来说编译和运行都很好,所以图片中缺少了一些东西;问题是他对sys_refcursor也有同样的问题。