2013-12-09 17 views
0

當我嘗試執行此代碼時,出現以下錯誤。我無法解決這個問題 - 我錯過了什麼?我沒有收到下面給出的Oracle的軟件包代碼中的錯誤:

 
SHOW ERRORS; 
Errors for PACKAGE BODY PKG_VIEW_LEDGER: 

LINE/COL ERROR 
-------- ----------------------------------------------------------------- 
0/0  PL/SQL: Compilation unit analysis terminated 
1/14  PLS-00304: cannot compile body of 'PKG_VIEW_LEDGER' without its 
     specification 

1/14  PLS-00905: object SYSTEM.PKG_VIEW_LEDGER is invalid 

---下面的代碼---

CREATE OR REPLACE PACKAGE PKG_VIEW_LEDGER AS 
     TYPE cur_view_data is REF CURSOR; 

     PROCEDURE sp_view_ledger(person IN VARCHAR2, cur_inout IN OUT cur_view_data); 
END PRG_VIEW_LEDGER; 
/

CREATE OR REPLACE PACKAGE BODY PKG_VIEW_LEDGER AS 
PROCEDURE sp_view_ledger(person IN VARCHAR2, cur_inout IN OUT cur_view_data) 
IS 
    tmp_cursor cur_view_data; 
BEGIN 
    OPEN tmp_cursor FOR 
     select * from ledger where person like '%" + myArg.ToUpper + "%'; 

    cur_inout := tmp_cursor; 
END sp_view_ledger; 
END PKG_VIEW_LEDGER; 
/

回答

1

首先,基於錯誤,您正在創建的SYSTEM架構包。不要這樣做。 SYSSYSTEM是特殊的,Oracle應僅爲Oracle提供的對象使用。您需要一個新的模式,您可以在其中創建自己的對象。 SYSSYSTEM是特殊的,並不總是以與正常模式相同的方式執行,因此如果使用這些模式,各種功能位似乎不能正常工作。

其次,當您定義包裝規格時,您的END與您的CREATE不符。您正在創建PKG_VIEW_LEDGER而您正在結束PRG_VIEW_LEDGERPKG!= PRG。如果您在創建包規格後有show errors,則錯誤會告訴您這一點。

+0

oHH,我錯過了。我糾正了錯誤。順便說一句,非常感謝你告訴我這個模式問題。讓我問你一些事情:我在工作場所有多個項目。我是否需要爲所有這些模式使用不同的模式,或者需要一個通用的模式。我總是對這個模式問題感到困惑。任何指針。?最後非常感謝 – Surya

+0

@ Surya-它取決於(如果不存在的話,將會是一個單獨的SO問題)。通常,模式應該是相關對象的集合。如果多個項目都與同一組對象相關(即在'bar'系統中構建'foo'模塊),那麼通常有一個模式是有意義的。如果多個項目完全獨立(即構建'foo'系統和不相關的'bar'系統),請使用單獨的模式。 –

0

我修改了代碼,它的工作正常。請嘗試從你身邊,讓我知道。謝謝。

CREATE OR REPLACE PACKAGE PKG_VIEW_LEDGER AS 
     TYPE cur_view_data is REF CURSOR; 

     PROCEDURE sp_view_ledger(person IN VARCHAR2, cur_inout IN OUT cur_view_data); 
     END PkG_VIEW_LEDGER; 
-------------------------------------------------------------- 
Package created. 
-------------------------------------------------------------- 
     CREATE OR REPLACE PACKAGE PKG_VIEW_LEDGER AS 
       TYPE cur_view_data is REF CURSOR; 

       PROCEDURE sp_view_ledger(person IN VARCHAR2, cur_inout IN OUT cur_view_data); 
     END PRG_VIEW_LEDGER; 
     /

     CREATE OR REPLACE PACKAGE BODY PKG_VIEW_LEDGER AS 
     PROCEDURE sp_view_ledger(person IN VARCHAR2, cur_inout IN OUT cur_view_data) 
     IS 
      tmp_cursor cur_view_data; 
     BEGIN 
      OPEN tmp_cursor FOR 
       select * from avrajit; 

      cur_inout := tmp_cursor; 
     END sp_view_ledger; 
     END PKG_VIEW_LEDGER; 
    /
    ----------------------------------------------------- 

    Package Body created. 

    0.04 seconds 
相關問題