2012-01-10 90 views
0
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; 

我不断收到: 警告:执行与警告的Oracle SQL Developer不能创建包体

完成,程序不能老是叫:

*错误报告:ORA -04063:包体“IRT.PACKET”有错误ORA-06508:PL/SQL:找不到正在调用的程序单元:
“IRT.PACKET”ORA-06512:at line 7
04063. 00000 - “% s有错误“
*原因:尝试执行存储过程或使用具有 错误的视图。对于存储过程,问题可能是语法错误 或对其他不存在的过程的引用。对于视图, 该问题可能是视图的定义查询中的引用, 不存在的表。 也可以是引用不存在或不可访问类型的表。
操作:根据需要修复错误和/或创建引用对象。

回答

2

您必须在包规范中声明的包体中定义函数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; 
+0

不,尝试过; – Samson 2012-01-10 10:56:54

+0

当你尝试编译软件包时会得到什么错误?它是ORA-24344吗? – Ollie 2012-01-10 10:57:47

+0

它在编译时没有错误。这只是一个警告,我不能看到它。 – Samson 2012-01-10 10:59:07

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 

正如你所看到的,这可以很容易地发现你的布卢姆:你还没有在包体中定义GETROW。像这样添加一个存根将允许包编译:

FUNCTION getrow 
    return tip 
IS 
     rv tip; 
BEGIN 
     return rv; 
END; 
+0

Unbelievable..I必须与该模式还定义了包体: CREATE OR REPLACE PACKAGE BODY IRT.packet AS ... 现在,它的工作原理。 10x – Samson 2012-01-10 11:01:55

+0

你不是在自己的模式中编译它? – Ollie 2012-01-10 11:04:43

+1

“令人难以置信”:*乐意理由* – APC 2012-01-10 11:19:45