创建oracle包遇到PLS-00103:遇到符号"CREATE"

Gar*_*ary 22 oracle plsql pls-00103

我正在使用Oracle sql开发人员编写一个oracle包,我得到了这个编译错误:

错误(7,1):PLS-00103:遇到符号"CREATE".

create or replace
PACKAGE TestPackage AS 
 FUNCTION beforePopulate RETURN BOOLEAN;
 FUNCTION afterPopulate RETURN BOOLEAN;
END TestPackage;

CREATE OR REPLACE PACKAGE BODY TestPackage AS
   FUNCTION beforePopulate RETURN BOOLEAN AS
   BEGIN
      DELETE FROM TEST_1;
      INSERT INTO TEST_1
      SELECT * FROM TEST WHERE VALUE=300;
      COMMIT;
      RETURN TRUE;
     EXCEPTION
       WHEN OTHERS THEN
        RETURN FALSE;
   END;
   FUNCTION afterPopulate RETURN BOOLEAN AS
     BEGIN
         UPDATE TEST SET RESULT="completed" WHERE VALUE=300;
            COMMIT;
         RETURN TRUE;
         EXCEPTION
           WHEN OTHERS RETURN FALSE;
        END;
  END;
END TestPackage;
Run Code Online (Sandbox Code Playgroud)

如果我/在第6行添加,则错误变为:

错误(6,1):PLS-00103:遇到符号"/"

我厌倦了这样一个空实现:

create or replace 
package package1 as 
END PACKAGE1;

CREATE OR REPLACE 
package body package1 as 
end package1;
Run Code Online (Sandbox Code Playgroud)

我得到了同样的错误.

And*_*lfe 27

当你有BEGIN,END等时,你处于PL/SQL,而不是SQL.

PL/SQL块需要在行的最开头用一个("正向")斜杠终止.这告诉Oracle您已完成PL/SQL块,因此它会编译该文本块.

SQL查询 - 以分号结束:

update orders set status = 'COMPLETE' where order_id = 55255;
Run Code Online (Sandbox Code Playgroud)

PL/SQL块-命令分离由分号,块由斜杠终止:

create or replace procedure mark_order_complete (completed_order_id in number)
is
begin
     update orders set status = 'COMPLETE' where order_id = :completed_order_id;
end mark_order_complete;
/
Run Code Online (Sandbox Code Playgroud)


M. *_* R. 6

这对我使用Oracle SQL Developer很有用:

create or replace PACKAGE TestPackage AS
FUNCTION beforePopulate 
 RETURN BOOLEAN;  
FUNCTION afterPopulate 
 RETURN BOOLEAN;
END TestPackage;
/
CREATE OR REPLACE PACKAGE BODY TestPackage AS    
 FUNCTION beforePopulate 
  RETURN BOOLEAN  AS    
 BEGIN       
  DELETE FROM TESTE;      
  INSERT INTO TESTE       
  SELECT 1,1,1 FROM DUAL; 
  COMMIT;     
  RETURN TRUE;  
 EXCEPTION    
  WHEN OTHERS THEN   
   RETURN FALSE;   
 END;
 FUNCTION afterPopulate 
  RETURN BOOLEAN  AS  
 BEGIN
  UPDATE TESTE SET TESTE='OK' WHERE TESTE='';
  COMMIT;       
  RETURN TRUE;  
 EXCEPTION       
  WHEN OTHERS THEN RETURN FALSE;    
 END; 
END TestPackage;
/   
Run Code Online (Sandbox Code Playgroud)

在我真正创建它使用的表和列之前,我无法运行它.

  • 另外,请确保将其作为脚本运行,我认为它应该是F5. (3认同)

Dro*_*out 5

经过几个小时的挫折后,我设法让这个东西发挥作用。我遇到了和你一样问题。

我的解决方案是将其作为脚本运行 - 而不是在包代码中。正斜杠在 SQL 工作表中可以正常工作。我把区别贴出来,希望对你有帮助!

在此输入图像描述