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

时间:2012-02-10 17:09:02

标签: 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;

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

  

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

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

create or replace 
package package1 as 
END PACKAGE1;

CREATE OR REPLACE 
package body package1 as 
end package1;

我犯了同样的错误。

6 个答案:

答案 0 :(得分:27)

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

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

SQL查询 - 以分号结尾:

update orders set status = 'COMPLETE' where order_id = 55255;

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;
/

答案 1 :(得分: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;
/   

在实际创建它使用的表和列之前,我无法运行它。

答案 2 :(得分:4)

经过几个小时的挫折后,我设法让这些东西运转起来。我遇到了完全问题。

我的解决方案是将其作为脚本运行 - 而不是在包代码中。正斜杠在SQL工作表中正常工作。我附加了差异,我希望它能帮到你!

enter image description here

答案 3 :(得分:2)

我遇到了同样的问题。我使用左侧的主菜单创建包,并将包声明和主体放在相同的.sql文件中。 当我复制所有代码并将其粘贴到新工作表并放入" /"后 end package_name(包声明和正文后),然后以脚本形式执行工作表。

答案 4 :(得分:1)

使用F5单独执行包和包体

答案 5 :(得分:0)

我遇到了这个问题(错误(6,1):PLS-00103:当我将sqldeveloper中的所有数据库包代码(程序头和实现)都压缩到user / packages / MY_PACKAGE_NAME /时,遇到符号“/”) MY_PACKAGE_BODY而不是将标题(最后没有'/')复制到user / packages / MY_PACKAGE_NAME和实现(顶部没有标题,最后没有'/')到user / packages / MY_PACKAGE_NAME / MY_PACKAGE_BODY。