例外のテスト

  VALUE_ERROR



内部変数 WK_VALUE のサイズを 1バイトとして定義し、
引数の文字列が 2バイト以上だとエラーになる事を確かめます

  
FUNCTION ERR_TEST_01
(
	PM_STRING IN VARCHAR2	/* 引数の定義 */
)
RETURN VARCHAR2	/* 戻り値の定義 */

/**********************************************************/
/* 変数の定義 */
/**********************************************************/
AS
	RET_VALUE	VARCHAR2(2000);
	WK_VALUE	VARCHAR2(1);

/**********************************************************/
/* 処理開始 */
/**********************************************************/
BEGIN
	WK_VALUE := PM_STRING;
	RETURN RET_VALUE;

/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
EXCEPTION
	WHEN OTHERS THEN
		RET_VALUE := '例外発生:'||SQLCODE||':'||SQLERRM;
		RETURN RET_VALUE;
END;
  

VALUE_ERROR

算術エラー、変換エラー、切捨てエラー、またはサイズ制約エラーが発生した場合。

その値が変数の宣言された長さよりも長い場合 VALUE_ERROR を呼び出します。

プロシージャ文では、文字列から数値への変換が失敗した場合に VALUE_ERROR が呼び出されます。
(SQL文では、INVALID_NUMBERが呼び出されます。)

SQLERRM は、同じコードでも原因毎の内容を取り出します

↓変換エラー
  
FUNCTION ERR_TEST_01
(
	PM_STRING IN VARCHAR2	/* 引数の定義 */
)
RETURN VARCHAR2	/* 戻り値の定義 */

/**********************************************************/
/* 変数の定義 */
/**********************************************************/
AS
	RET_VALUE	VARCHAR2(2000);
	WK_VALUE	NUMBER;

/**********************************************************/
/* 処理開始 */
/**********************************************************/
BEGIN
	WK_VALUE := PM_STRING;
	RETURN RET_VALUE;

/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
EXCEPTION
	WHEN OTHERS THEN
		RET_VALUE := '例外発生:'||SQLCODE||':'||SQLERRM;
		RETURN RET_VALUE;
END;
  



  TOO_MANY_ROWS



SELECT INTO文 は、テーブルの内容を取り出す為の有効な記述方法ですが、
変数への代入を行う為、行が複数戻されると例外が発生します

  
select
	プロシージャ名,
	更新日
into
	WK_プロシージャ名,
	WK_更新日
from PROC_LIST;

RET_VALUE := WK_プロシージャ名 || '|' || WK_更新日;
RETURN RET_VALUE;
  

  
FUNCTION ERR_TEST_02
(
	PM_STRING IN VARCHAR2	/* 引数の定義 */
)
RETURN VARCHAR2	/* 戻り値の定義 */

/**********************************************************/
/* 変数の定義 */
/**********************************************************/
AS
	RET_VALUE	VARCHAR2(2000);
	WK_VALUE	VARCHAR2(2000);
	WK_プロシージャ名 PROC_LIST.プロシージャ名%TYPE;
	WK_更新日 PROC_LIST.更新日%TYPE;

/**********************************************************/
/* 処理開始 */
/**********************************************************/
BEGIN
	select
		プロシージャ名,
		更新日
	into
		WK_プロシージャ名,
		WK_更新日
	from PROC_LIST;

	RET_VALUE := WK_プロシージャ名 || '|' || WK_更新日;
	RETURN RET_VALUE;

/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
EXCEPTION
	WHEN OTHERS THEN
		RET_VALUE := '例外発生:'||SQLCODE||':'||SQLERRM;
		RETURN RET_VALUE;
END;
  

↓正しく実行する為に条件を追加
  
FUNCTION ERR_TEST_02
(
	PM_STRING IN VARCHAR2	/* 引数の定義 */
)
RETURN VARCHAR2	/* 戻り値の定義 */

/**********************************************************/
/* 変数の定義 */
/**********************************************************/
AS
	RET_VALUE	VARCHAR2(2000);
	WK_VALUE	VARCHAR2(2000);
	WK_プロシージャ名 PROC_LIST.プロシージャ名%TYPE;
	WK_更新日 PROC_LIST.更新日%TYPE;

/**********************************************************/
/* 処理開始 */
/**********************************************************/
BEGIN
	select
		プロシージャ名,
		更新日
	into
		WK_プロシージャ名,
		WK_更新日
	from PROC_LIST
		where プロシージャ名 = PM_STRING;

	RET_VALUE := WK_プロシージャ名 || '|' || WK_更新日;
	RETURN RET_VALUE;

/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
EXCEPTION
	WHEN OTHERS THEN
		RET_VALUE := '例外発生:'||SQLCODE||':'||SQLERRM;
		RETURN RET_VALUE;
END;
  











  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ