在这里,我正在尝试一些非常简单的事情,只是创建一个包及其包主体。这是我的代码(来自oracle documentation):
create or replace PACKAGE emp_bonus_2 AS
PROCEDURE calc_bonus (date_hired number);
END emp_bonus_2;
/
CREATE PACKAGE BODY emp_bonus_2 AS
PROCEDURE calc_bonus
(date_hired number) IS
BEGIN
DBMS_OUTPUT.PUT_LINE
('Employees hired on ' || date_hired || ' get bonus.');
END;
END emp_bonus_2 ;
/
编译时出现此错误:
错误(4,1):PLS-00103:遇到符号“ /”
我之前使用“ /”创建触发器没有任何问题,所以我不知道问题出在哪里。我尝试删除“ /”,这给了我一个“遇到创建”错误。
我正在使用Oracle 11g数据库上的SQLDeveloper。
答案 0 :(得分:4)
您的代码:
create or replace PACKAGE emp_bonus_2 AS
PROCEDURE calc_bonus (date_hired number);
END emp_bonus_2;
/
CREATE PACKAGE BODY emp_bonus_2 AS
PROCEDURE calc_bonus
(date_hired number) IS
BEGIN
DBMS_OUTPUT.PUT_LINE
('Employees hired on ' || date_hired || ' get bonus.');
END;
END emp_bonus_2 ;
/
此代码块是一个脚本,它创建两个对象,一个PACKAGE和一个PACKAGE BODY。
SQL Developer中的代码编辑器旨在用于单个代码对象。您可以复制并粘贴第一个或第二个代码对象,不带'/',就可以了。
如果要执行整个块,可以将其放入SQL工作表中,并使用F5运行。
“ /”告诉SQL Developer您已经完成了PL / SQL代码。从数据库的角度来看,这没有任何意义,因此,当您将其包含在“代码编辑器”中时,该错误也将被发送到数据库。
当您在SQL Worksheet中执行该代码时,SQL Developer看到'/'然后走了,啊,那是那段代码的结尾,执行它,然后重新开始。 “ /”永远不会进入数据库本身。
请注意,在SQL Plus中,“ /”也可能意味着“再次运行该代码段”。在为SQL Plus构建部署脚本时,这可能会引起问题,因为您添加了
,因此可以执行多次操作SQL缓冲区SQL缓冲区存储最近输入的SQL 命令或PL / SQL块(但不是SQL * Plus命令)。该命令或 块保留在缓冲区中,直到被下一个SQL命令替换为止或 PL / SQL块。您可以使用LIST命令查看缓冲区内容。
您可以使用RUN在SQL缓冲区中执行命令或块 或/(斜杠)命令。 RUN在缓冲区中显示命令或块 在执行它之前。 /(斜杠)执行命令或块 缓冲区而不先显示它。有关编辑 存储在缓冲区中的命令或块,请参见在SQL * Plus中编辑脚本 命令行。
答案 1 :(得分:1)
原来是我的错。当我尝试从程序包编辑器选项卡(程序包-> emp_bonus_2)编译代码时,它失败了。
将所有代码移到工作表并执行它可以正常工作。