2012-01-10 93 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