PL/SQLストアドファンクション

実践オラクルデータベース構築・運用

オラクルデータベース構築オラクルデータベース運用SQL書式PL/SQL書式Oracle Master試験

TOP PL/SQL書式 PL/SQL実践活用

PL/SQLストアドファンクション


スポンサードリンク
スポンサードリンク


PL/SQLストアドファンクション



PL/SQLストアドファンクションは、処理実行後に結果を一つ戻すストアド・サブプログラムです。プログラムを作成したことあるひとなら関数をイメージして頂くとよいと思います。ファンクションには、Oracleによって事前に用意されている組み込みファンクションと独自に機能を盛り込んで作成するオリジナルファンクションがあります。本項では、オリジナルファンクションの書式や作成方法、実行方法について解説します。

ストアドプロシージャは、SQL文の中で実行することができませんが、ストアドファンクションは通常のSQL関数同様にSQL文の中でも実行することが可能です。

◆ストアドファンクションの書式


CREATE [OR REPLACE] FUNCTION <ファンクション名> [<パラメータ名> <データ型>] RETURN <データ型>
{ IS | AS }
 <宣言部>
BEGIN
 <実行部>
EXCEPTION
 <例外処理部>
END;

※仕様部が最初の1行、2行目以降が本体となります。
※<ファンクション名>は、FUNCTIONキーワードの後に任意の名前を指定します。

※[ OR REPLACE ]は、同名のプロシージャが既に作成されている場合、上書きして作成します。
※[ <パラメータ名> <データ型> ]は、プロシージャに渡すパラメータを指定します。
※RETURN句は戻り値のデータ型を指定します。
※ファンクションの本体もPL/SQLブロックと同様、宣言部・実行部・例外処理部で構成されます。
※宣言部は、DECLAREでなくISまたはASで開始する。
※宣言部は不要でもISまたはASは省略できない。ISとASには違いはない。

※ファンクションでは、実行部にRETURN文が必須となります。



以下にストアドファンクションの作成例を示します。

SQL> CREATE OR REPLACE FUNCTION function_sample(fnum NUMBER) RETURN NUMBER
2 IS
3 fnum2 NUMBER;
4 BEGIN
5 fnum2 := fnum*2;
6 RETURN(fnum2);
7 END;
8 /

ファンクションが作成されました。

SQL>

※コンパイル時がエラーもしくは警告が発生した場合の、対処方法は「PL/SQLコンパイルエラー確認方法」で解説しています。


以下にストアドファンクション作成後の確認方法を示します。

SQL> SET PAGES 1000
SQL> COLUMN object_name FORMAT a30;
SQL> COLUMN object_type FORMAT a30;
SQL> SELECT object_name,object_type,status FROM user_objects WHERE object_name='FUNCTION_SAMPLE';

OBJECT_NAME OBJECT_TYPE STATUS
------------------------------ ------------------------------ --------------
FUNCTION_SAMPLE FUNCTION VALID

SQL>



以下にストアドファンクションの実行例を示します。

SQL> select function_sample(2) from dual;

FUNCTION_SAMPLE(2)
------------------
4

SQL>



PL/SQLの実践活用方法

 ● PL/SQLエディタ利用
   ⇒直接記述するのではなく、テキストエディタを使用して編集・保存します。

 ● PL/SQLストアドプロシージャ
   ⇒特定の処理を実行するためのプログラムをOracleに格納し使用します。

 ● PL/SQLストアドファンクション
   ⇒プロシージャから呼び出され、処理を実行し値をプロシージャに返します。

 ● PL/SQLパッケージ
   ⇒複数のPL/SQLプログラムを纏めて使用します。

 ● PL/SQLトリガー
   ⇒特定のアクションを引き金にプログラムを動作させる際に使用します。




スポンサードリンク

リンク集 / 免責事項サイトマップ問い合わせ
Copyright (C) 2012  実践オラクルデータベース構築・運用  All rights reserved