概要
OracleDB で 初めて FUNCTION を使ったのでそのときのメモ
環境
- Oracle Database 12c
詳細
今回実装したのは、以下のような処理を行う FUNCTION です。
- 渡した引数の比率の計算結果を返す
- 分母が
NULL
もしくは0
のときは、100
を返す - 分子、分母がどちらも
NULL
の場合はNULL
を返す
実際のクエリは以下のものになります。
CREATE OR REPLACE FUNCTION CALCULATION_RATE(
vNumerator IN NUMBER -- 分子
,vDenominator IN NUMBER -- 分母
) RETURN NUMBER
IS
result NUMBER
;
BEGIN
IF (vNumerator IS NULL AND vDenominator IS NULL) THEN
result := NULL;
ELSIF (vDenominator IS NULL OR vDenominator = 0) THEN
result := 100;
ELSE
result := TRUNC(NVL(vNumerator, 0) / vDenominator * 100, 1);
END IF;
RETURN result;
END;
/
ポイントとしては、
-
CREATE OR REPLACE FUNCTION [関数名](引数)
で宣言 -
RETURN [型]
で戻り値の型を定義 -
IS
で関数内で利用する変数を宣言 -
BEGIN
~END
に処理を記述する
といったところだと思います。
まとめ
繰り返し呼ばれるような処理だったり、複雑な判定をクエリ上に書きたくない時などは、
FUNCTION にすることを考えたほうがいいと思いました。
単一の値だけでなく、SELECT 結果など複数の値を返すこともできるので、その部分については、
また別途まとめようと思います。