首页 文章

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

提问于
浏览
21

我正在使用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

    当你有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;
    /
    
  • 26

    这对我使用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;
    /
    

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

  • 6

    经过几个小时的挫折,我设法使这些东西工作 . 我和你一样遇到了 exact 问题 .

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

    enter image description here

  • 1

    用F5分别执行包和包体

  • 3

    我有同样的问题 . 我使用左侧的主菜单创建包,并将包声明和主体放在相同的.sql文件中 . 当我复制所有代码并将其粘贴到新工作表中并在结束package_name之后放入“/”(包声明和正文之后)然后执行工作表作为脚本时,问题就解决了 .

  • 1

    我有这个问题(错误(6,1):PLS-00103:出现“/”符号)时,我coppied所有数据库封装代码(包括程序头和实现)中的SQLDeveloper到用户/包/ MY_PACKAGE_NAME / MY_PACKAGE_BODY代替将 Headers (最后没有'/')复制到user / packages / MY_PACKAGE_NAME和实现(顶部没有 Headers ,最后没有'/')到user / packages / MY_PACKAGE_NAME / MY_PACKAGE_BODY .

相关问题