PL/SQL プログラミング入門(1) > ローカル・サブプログラム

ローカル・サブプログラム

ローカル・サブプログラムとは、変数の宣言部に記述する 「サブプログラム」 のことである。
ローカル・サブプログラムを使用することで 「スタンドアロン・サブプログラム」 (単独のストアドプロシージャ)においても内部でモジュール化することが可能となる。オーバーロード も可能となっている。

ローカル変数と同じようにスコープは該当ブロックに限定される。
ローカル・サブプログラムは必ず変数の宣言の後に記述しなければならない。

ストアドプロシージャ(local_subprogram_sample) 内の ローカル・サブプログラム ADD の例

SQL> create or replace procedure local_subprogram_sample
  2  is
  3     -- ローカル変数
  4     vnum  number;
  5     vdate date;
  6
  7     -- ローカル・サブプログラム(1)
  8     FUNCTION ADD(n1 number, n2 number)
  9     return number is
 10     begin
 11             return n1 + n2 ;
 12     end;
 13     -- ローカル・サブプログラム(2)オーバーロードも可能
 14     FUNCTION ADD(dt date, d number)
 15     return date is
 16     begin
 17             return dt + d ;
 18     end;
 19  begin
 20     vnum := 10;
 21     vdate := date '2000-01-01';
 22
 23     dbms_output.put_line('Date Add = ' || add(vdate, 5));
 24     dbms_output.put_line('Num  Add = ' || add(vnum, 5));
 25  end;
 26  /
 
プロシージャが作成されました。
SQL> call local_subprogram_sample();
Date Add = 2000-01-06 00:00:00
Num  Add = 15
 
コールが完了しました。

ローカル・サブプログラムのスコープの確認

ローカル・サブプログラムに同じ名前(オーバーロードでもない)を使用してもスコープによって使い分けられる。

SQL> declare
  2  -- スコープA
  3     function LOCAL_SUB_TWINS
  4     return varchar2 is
  5     begin
  6             return 'あいう';
  7     end;
  8  begin
  9     declare
 10     -- スコープB
 11             function LOCAL_SUB_TWINS
 12             return varchar2 is
 13             begin
 14                     return 'ABC';
 15             end;
 16     begin
 17             dbms_output.put_line(LOCAL_SUB_TWINS());
 18     -- スコープBのファンクション LOCAL_SUB_TWINS を呼び出す
 19     end;
 20
 21     dbms_output.put_line(LOCAL_SUB_TWINS());
 22     -- スコープAのファンクション LOCAL_SUB_TWINS を呼び出す
 23  end;
 24  /
ABC
あいう
 
PL/SQLプロシージャが正常に完了しました。


より実践的なローカル・サブプログラムの使用例

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ 会員制(無料)の公式技術サイト