编译包时遇到符号“ /”

时间:2019-01-13 18:15:08

标签: oracle plsql oracle-sqldeveloper

在这里,我正在尝试一些非常简单的事情,只是创建一个包及其包主体。这是我的代码(来自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。

2 个答案:

答案 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构建部署脚本时,这可能会引起问题,因为您添加了

,因此可以执行多次操作

Docs

  

SQL缓冲区SQL缓冲区存储最近输入的SQL   命令或PL / SQL块(但不是SQL * Plus命令)。该命令或   块保留在缓冲区中,直到被下一个SQL命令替换为止或   PL / SQL块。您可以使用LIST命令查看缓冲区内容。

     

您可以使用RUN在SQL缓冲区中执行命令或块   或/(斜杠)命令。 RUN在缓冲区中显示命令或块   在执行它之前。 /(斜杠)执行命令或块   缓冲区而不先显示它。有关编辑   存储在缓冲区中的命令或块,请参见在SQL * Plus中编辑脚本   命令行。

答案 1 :(得分:1)

原来是我的错。当我尝试从程序包编辑器选项卡(程序包-> emp_bonus_2)编译代码时,它失败了。
将所有代码移到工作表并执行它可以正常工作。