2013-12-09 16 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 
相关问题