JavaScriptが無効になっています。
この状態では一部の情報が表示されず、すべての機能を利用することができません。
現在では一般的な機能であるが PL/SQL においても同一の名前を持つプロシージャ、ファンクション、メソッドを複数定義することができる。
オーバーロードの用途として代表的なものは機能的な違いと高速化のための分岐が考えられる。
機能的な違いは例えば ADD というメソッドにおいて、「ある数に別のある数を足す」という 加算(ADD)ファンクションと「ある日付にある日数を足す」という加算ファンクションの同名のファンクションが2つ存在できるということである。(スタンドアロン・サブプログラム には使用できない)
高速化のためのオーバーロードとしてはある複雑な計算式を求めるファンクションを作成したときに呼び出すライブラリを整数演算処理と浮動小数点処理で分けることができる。(整数用のライブラリの方が高速に演算処理できるようにチューニングされているとする)
例) OVERLOADING パッケージに NUMBER 用と PLS_INTEGER 用の COMPLEX ファンクションを用意する。
CREATE OR REPLACE PACKAGE RIVUS.OVERLOADING IS FUNCTION COMPLEX(N NUMBER) RETURN NUMBER; FUNCTION COMPLEX(N PLS_INTEGER) RETURN NUMBER; END; / CREATE OR REPLACE PACKAGE BODY RIVUS.OVERLOADING IS -- NUMBER 用 常に0を戻す FUNCTION COMPLEX(N NUMBER) RETURN NUMBER IS BEGIN RETURN 0; END; -- PLS_INTEGER 用 常に1を戻す FUNCTION COMPLEX(N PLS_INTEGER) RETURN NUMBER IS BEGIN RETURN 1; END; END; /SQL> set serveroutput on SQL> declare 2 n number := 1 ; 3 p pls_integer := 2; 4 begin 5 dbms_output.put_line(overloading.complex(n)); 6 dbms_output.put_line(overloading.complex(p)); 7 end; 8 / 0 1
ちなみに SQL から呼び出すと NUMBER 型のファンクションが呼ばれる。(SQL に PLS_INTEGER が存在しない)
(追記) (追記ここまで)