SQLの窓

2011年09月10日


Oracle : PL/SQL : Function のサンプルと使い方

Function は、Procedure と違って、一つの戻り値を返す仕様になっているのでselect 構文の中でシステムで定義された関数と同様の使い方ができます。

以下の Function は、引数で与えられた値を元に、社員マスタを参照して3種類の値を select の結果として返す事になります。

1) データが存在した場合 : 氏名
2) 元の値が NULL の場合 : 該当者は存在しません
3) 対象行が存在しなかった場合 : 該当データがシステムに存在しません
select 
	社員コード,
	氏名,
	GET_CNAME(管理者) as 管理者名
 from 社員マスタ
自分で構築したシステム上で使う場合、特殊な計算や複数の煩雑なテーブル参照というような処理を Function で定義しておく事によって、効率が良く見通しの良いアプリケーションを作成する事ができます
CREATE OR REPLACE FUNCTION GET_CNAME
(
	/* 文字列引数の定義 */
	PM_STRING IN VARCHAR2
)
/* 戻り値の定義 */
RETURN VARCHAR2

/**********************************************************/
/* 変数の定義 */
/**********************************************************/
AS
	RET_VALUE	VARCHAR2(2000);
	WK_VALUE	VARCHAR2(2000) := '初期値の設定';

/**********************************************************/
/* 処理開始 */
/**********************************************************/
BEGIN
	/* デバッグ表示 */
	DBMS_OUTPUT.PUT_LINE( 'デバッグ:開始' );
	DBMS_OUTPUT.PUT_LINE( 'デバッグ:引数:' || PM_STRING );
	DBMS_OUTPUT.PUT_LINE( WK_VALUE );

	/* 代入 */
	RET_VALUE := PM_STRING;

	IF RET_VALUE is NULL THEN 
		DBMS_OUTPUT.PUT_LINE( 'NULLデータです' );
		RET_VALUE := '該当者は存在しません';
	ELSE 
		DBMS_OUTPUT.PUT_LINE( 'データ有り' );
		SELECT 氏名 INTO WK_VALUE from 社員マスタ
			WHERE 社員コード = RET_VALUE;
		RET_VALUE := WK_VALUE;
	END IF; 

	/* 戻り値 */
	RETURN RET_VALUE;

/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
$if 1=1 $then
EXCEPTION
	WHEN OTHERS THEN
		WK_VALUE := '例外発生:'||SQLCODE||':'||SQLERRM;
		DBMS_OUTPUT.PUT_LINE( WK_VALUE );
		RET_VALUE := '該当データがシステムに存在しません';
		RETURN RET_VALUE;
$end
END;

SELECT INTO に対して単純に WHEN OTHERS THEN で例外処理を行っていますがこの場合は、NO_DATA_FOUND が発生しているはずです。

関連する記事

PL/SQL : Function 雛形




タグ:Oracle PL/SQL
posted by lightbox at 2011-09-10 01:18 | Oracle : PL/SQL | このブログの読者になる | 更新情報をチェックする
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり