1

次のパッケージとパッケージ本体を作成しました。

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;
/

「パッケージがセッションで初めて呼び出されたとき、discount_rateの値は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 を初めて使用し、認定試験の準備をしています。

4

1 に答える 1

1

申し訳ありませんが、表示されたエラーを再現できませんでした:

C:\>sqlplus user/password

SQL*Plus: Release 11.2.0.2.0 Production on Sat Mar 23 11:31:19 2013

Copyright (c) 1982, 2010, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production

SQL> set serveroutput on
SQL> execute discounts.display_price(1000);
Discount rate 3:0
Discount rate 4:.1
Discount rate 1:.1
Discounted 100
Discount rate 2:.1

PL/SQL procedure successfully completed.

SQL> begin
  2    dbms_output.put_line('Discount rate :'||discounts.discount_rate);
  3  end;
  4  /
Discount rate :.1

PL/SQL procedure successfully completed.

SQL> exit
Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production

C:\>sqlplus user/password

SQL*Plus: Release 11.2.0.2.0 Production on Sat Mar 23 11:31:50 2013

Copyright (c) 1982, 2010, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production

SQL> set serveroutput on
SQL> begin
  2    dbms_output.put_line('Discount rate :'||discounts.discount_rate);
  3  end;
  4  /
Discount rate 3:0
Discount rate 4:.1
Discount rate :.1

PL/SQL procedure successfully completed.

SQL>
于 2013-03-23T11:34:52.390 に答える