CREATE OR REPLACE PACKAGE packet AS
TYPE tip IS RECORD(a1 INT,a2 VARCHAR2(20));
FUNCTION getrow return tip;
PROCEDURE setrow(v tip);
END packet;
/
CREATE OR REPLACE PACKAGE BODY packet AS
PROCEDURE setrow(v tip) IS
BEGIN
dbms_output.put_line('kikkkk');
END;
end packet;
我一直在: 警告:执行完成并带有警告
并且不能调用该过程:
*错误报告:ORA-04063:包体“IRT.PACKET”有错误ORA-06508:PL / SQL:找不到被调用的程序单元:
“IRT.PACKET”ORA-06512:第7行 04063. 00000 - “%s有错误”
*原因:尝试执行存储过程或使用具有的视图 错误。对于存储过程,问题可能是语法错误 或提及其他不存在的程序。对于观点, 问题可能是视图定义查询中的引用 一个不存在的表。 也可以是一个引用不存在或表的表 无法进入的类型 操作:根据需要修复错误和/或创建引用的对象。
答案 0 :(得分:3)
您必须在包规范中声明的包体中定义函数GETROW
。
这将使您的包能够编译,然后您应该可以调用它。
当我添加GETROW
CREATE OR REPLACE PACKAGE packet
AS
TYPE tip IS RECORD(
a1 INT,
a2 VARCHAR2( 20 )
);
FUNCTION getrow
RETURN tip;
PROCEDURE setrow( v tip );
END packet;
/
CREATE OR REPLACE PACKAGE BODY packet
AS
FUNCTION getrow
RETURN tip
IS
v_tip tip;
BEGIN
v_tip.a1 := 1;
v_tip.a2 := 'test';
RETURN v_tip;
END;
PROCEDURE setrow( v tip )
IS
BEGIN
DBMS_OUTPUT.put_line( 'kikkkk' );
END;
END packet;
答案 1 :(得分:3)
在SQL Developer工作表中,您可以运行此查询:
select * from user_errors
这将为您提供以下结果:
NAME | TYPE |SEQUENCE |LINE |POSITION |TEXT ATTRIBUTE |MESSAGE_NUMBER
--------+--------------+---------+-----+---------+------------------------------------------------+--------------
PACKET | PACKAGE BODY | 1 | 3 | 13 |PLS-00323: subprogram or cursor 'GETROW' is decl| ERROR 323
|ared in a package specification and must be defi
|ned in the package body
正如您所看到的,这使您可以轻松发现您的bloomer:您尚未在包体中定义GETROW。添加这样的存根将允许包编译:
FUNCTION getrow
return tip
IS
rv tip;
BEGIN
return rv;
END;