e-learning、オラクル研修、LMS(学習管理システム)のiStudy

e-learning、オラクル研修、LMS(学習管理システム)のiStudy

第21回 「ストアド・ファンクション概要」

2012.05.21

今回からはストアド・ファンクションをテーマにします。
今回はまず、ファンクションの概要を説明します。詳細な文法説明は次回にします。

プロシージャとファンクションは、どちらもプログラムですから、何かの処理を行うことが可能であるという点では本質的な違いはありません。
しかしこの両者には大きく違う点が1つあります。

それは、ファンクションは「値を返す」ということです。

呼び出し元に値を返すという点では、プロシージャでもOUTのパラメータを用いることで可能ですが、ファンクションの場合は、パラメータを通さずに値を直接返します。
誤解を恐れずに言えば「ファンクションそのものが値である」と言えます。

したがって、文の中で記述する値の代わりにファンクションそのものを記述できます。
例えば、文の中で値を記述する場所としては、代入文(:=)の右辺があります。
それ以外にも、IF文などの条件式の値や、SELECT文のSELECT句、WHERE句、INSERT文のVALUES句、UPDATE文のSET句、プロシージャの引数など、値を記述できる場所はいくらでもありますが、いずれも、値の変わりにファンクションを記述できます。

例えば、以下の例で、同じ処理でもプロシージャではなく、ファンクションを使った方が簡単になる場合があることがわかると思います。

<<<<<<プロシージャを使う場合>>>>>>
DECLARE
   V1    NUMBER;  --事前に変数を宣言しておく
BEGIN
   PROC1(V1);     -- PROC1プロシージャをコールし、戻り値をV1変数に格納する
   INSERT INTO TABLE_A VALUES(V1);  --そのV1変数を使って表にINSERTする
END;

<<<<<<ファンクションを使う場合>>>>>>
BEGIN
   -- FUNC1ファンクションの戻り値で表にINSERTする
   INSER INTO TABLE_A VALUES(FUNC1(引数));
END;

プログラムで値を取得し表にINSERTする処理で、ファンクションを使う場合は、直接INSERT文にファンクションを記述できるので、プロシージャを使う場合より簡単であることがわかります。

それでは今回はここまでにします。
次回から文法の説明をします。ご期待ください。

先頭へ戻る