0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

looking back this year for my techAdvent Calendar 2019

Day 8

OracleDB での FUNCTION の作り方

Last updated at Posted at 2019-12-07

概要

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 で関数内で利用する変数を宣言
  • BEGINEND に処理を記述する

といったところだと思います。

まとめ

繰り返し呼ばれるような処理だったり、複雑な判定をクエリ上に書きたくない時などは、
FUNCTION にすることを考えたほうがいいと思いました。

単一の値だけでなく、SELECT 結果など複数の値を返すこともできるので、その部分については、
また別途まとめようと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?