Plsql 错误:PLS-00103:遇到符号“;完";当预期以下情况之一时

Plsql 错误:PLS-00103:遇到符号“;完";当预期以下情况之一时,plsql,oracle10g,sqlplus,Plsql,Oracle10g,Sqlplus,我编写了以下包和包体: create or replace package discounts is g_id number := 7839; discount_rate number := 0.0; procedure display_price(p_price number); end; / create or replace package body discounts is procedure display_price(p_price number) is begin d

我编写了以下包和包体:

create or replace package discounts
is
g_id number := 7839;
discount_rate number := 0.0;
procedure display_price(p_price number);
end;
/
create or replace package body discounts
is
procedure display_price(p_price number)
is
  begin
     dbms_output.put_line('Discount rate 1:'||discount_rate); 
     dbms_output.put_line('Discounted '||to_char(p_price * nvl(discount_rate,0)));
     dbms_output.put_line('Discount rate 2:'||discount_rate); 
  end;
begin
  dbms_output.put_line('Discount rate 3:'||discount_rate); 
  discount_rate := 0.10;
  dbms_output.put_line('Discount rate 4:'||discount_rate); 
end;
/
写着“在会话中第一次调用包时,折扣率的值设置为0.10”。我没有完全理解这一点,这就是为什么我每次都检查贴现率的值。我键入了要调用的以下命令:

SQL> execute discounts.display_price(1000);
Discount rate 3:0
Discount rate 4:.1
Discount rate 1:.1
Discounted 100
Discount rate 2:.1
然后我再次调用变量:

  begin
    dbms_output.put_line('Discount rate :'||discounts.discount_rate);
  end;
  SQL> /
  Discount rate :.1
然后我键入“exit”关闭SQL*PLUS。我再次打开SQL*PLUS并键入了相同的代码:

  begin
    dbms_output.put_line('Discount rate :'||discounts.discount_rate);
  end;
我以为它不会初始化变量,但我得到了错误:

  ERROR at line 3:
  ORA-06550: line 3, column 1:
  PLS-00103: Encountered the symbol "END" when expecting one of the following:
  := . ( % ;
  The symbol ";" was substituted for "END" to continue.

错在哪里?我是PL/SQL新手,正在准备认证考试。

很抱歉,我无法重现您显示的错误:

C:\>sqlplus用户/密码
SQL*Plus:2013年3月23日星期六11:31:19发布11.2.0.2.0
版权所有(c)1982年,2010年,甲骨文。版权所有。
连接到:
Oracle Database 11g Express Edition 11.2.0.2.0版-生产
SQL>将服务器输出设置为打开
SQL>执行折扣。显示价格(1000);
贴现率3:0
贴现率4:1
贴现率1:1
折扣100
贴现率2:1
PL/SQL过程已成功完成。
SQL>开始
2 dbms_输出.输出线('折扣率:'| |折扣.折扣率);
3结束;
4  /
贴现率:.1
PL/SQL过程已成功完成。
SQL>退出
已断开与Oracle数据库11g Express Edition 11.2.0.2.0版-生产的连接
C:\>sqlplus用户/密码
SQL*Plus:2013年3月23日星期六11:31:50发布11.2.0.2.0
版权所有(c)1982年,2010年,甲骨文。版权所有。
连接到:
Oracle Database 11g Express Edition 11.2.0.2.0版-生产
SQL>将服务器输出设置为打开
SQL>开始
2 dbms_输出.输出线('折扣率:'| |折扣.折扣率);
3结束;
4  /
贴现率3:0
贴现率4:1
贴现率:.1
PL/SQL过程已成功完成。
SQL>

对不起,我无法重现您显示的错误:

C:\>sqlplus用户/密码
SQL*Plus:2013年3月23日星期六11:31:19发布11.2.0.2.0
版权所有(c)1982年,2010年,甲骨文。版权所有。
连接到:
Oracle Database 11g Express Edition 11.2.0.2.0版-生产
SQL>将服务器输出设置为打开
SQL>执行折扣。显示价格(1000);
贴现率3:0
贴现率4:1
贴现率1:1
折扣100
贴现率2:1
PL/SQL过程已成功完成。
SQL>开始
2 dbms_输出.输出线('折扣率:'| |折扣.折扣率);
3结束;
4  /
贴现率:.1
PL/SQL过程已成功完成。
SQL>退出
已断开与Oracle数据库11g Express Edition 11.2.0.2.0版-生产的连接
C:\>sqlplus用户/密码
SQL*Plus:2013年3月23日星期六11:31:50发布11.2.0.2.0
版权所有(c)1982年,2010年,甲骨文。版权所有。
连接到:
Oracle Database 11g Express Edition 11.2.0.2.0版-生产
SQL>将服务器输出设置为打开
SQL>开始
2 dbms_输出.输出线('折扣率:'| |折扣.折扣率);
3结束;
4  /
贴现率3:0
贴现率4:1
贴现率:.1
PL/SQL过程已成功完成。
SQL>

哦!我犯了个愚蠢的错误。我忘了写信;dbms_output.put_line语句中的符号。谢谢你的帮助……)@ankitaP:那么,基本上,你在问题中输入的代码不是导致错误的代码?按下“退出”按钮后,从“开始”到“结束”的代码在逻辑上是正确的,但我没有提到;当我在SQL*Plus中运行时,出现了与我写的完全相同的错误。但我确实提到过;当我在stackoverflow问的时候。我真傻:/噢!我犯了个愚蠢的错误。我忘了写信;dbms_output.put_line语句中的符号。谢谢你的帮助……)@ankitaP:那么,基本上,你在问题中输入的代码不是导致错误的代码?按下“退出”按钮后,从“开始”到“结束”的代码在逻辑上是正确的,但我没有提到;当我在SQL*Plus中运行时,出现了与我写的完全相同的错误。但我确实提到过;当我在stackoverflow问的时候。我真是太傻了:/