ローカル・サブプログラム
ローカル・サブプログラムとは、変数の宣言部に記述する 「サブプログラム」 のことである。
ローカル・サブプログラムを使用することで 「スタンドアロン・サブプログラム」 (単独のストアドプロシージャ)においても内部でモジュール化することが可能となる。オーバーロード も可能となっている。
ローカル変数と同じようにスコープは該当ブロックに限定される。
ローカル・サブプログラムは必ず変数の宣言の後に記述しなければならない。
ストアドプロシージャ(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プロシージャが正常に完了しました。
より実践的なローカル・サブプログラムの使用例