我正在使用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;
我犯了同样的错误。
答案 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工作表中正常工作。我附加了差异,我希望它能帮到你!
答案 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。