BEAGLE-HC 医薬品、医療機器の研究・開発 ポータルサイト
 現在位置 : HOME > ITの活用 プログラミング > SQL > PL/SQL コードライブラリアン(例外処理)
くすりのこと
 治療薬の最前線
データブック
 ヘルスケア市場
 データブック
 (売上ランキング)
ニュース
 企業ニュース
 (パイプラインニュース)
 (財務・決算ニュース)
 (M&Aニュース)
 メディアニュース
ITの活用
 バリデーション
 セキュリティ
 WORD文書の作成
 プログラミング
 (Word/VBA)
 (Excel/VBA)
 (Access/VBA)
 (SAS)
 (SQL)
イベント
 イベントカレンダ
製薬会社研究
 製薬会社
 製薬会社研究
 決算短信一覧
 
 
Word/VBA プログラミング Excel/VBA プログラミング Access/VBA プログラミング
SAS プログラミング SQL LiveCycle Designer
 
記述の規則 プログラム制御 関数 SQL文
ストアドプロセジャー ファイル操作 例外処理  
 
例外処理
 PL/SQL では、警告またはエラー条件を例外と呼びます。
エラー処理に例外を使用すると、コマンドを発行するたびに実行エラーを検査する必要がありません。また、エラー処理を通常の処理から明確に分離できます。
 エラーが発生すると例外が呼び出されます。つまり、通常の実行は中止され、PL/SQL ブロックまたはサブプログラムの例外処理部に制御が移ります。

 
 BEGIN
     SELECT ...
     SELECT ...
     SELECT ...
...  EXCEPTION
     WHEN NO_DATA_FOUND THEN -- catches all 'no data found' errors

例 ティッカ・シンボルXYZ の企業について、株価収益率を計算し、格納しています。企業の収益がゼロの場合は、事前定義の例外ZERO_DIVIDE が呼び出されます。このとき、ブロックの通常の実行は中止され、制御が例外ハンドラに移ります。ブロックで特に名前を指定していないすべての例外は、オプションのOTHERS ハンドラで処理します。

DECLARE
 pe_ratio NUMBER(3,1);
BEGIN
 SELECT price / earnings INTO pe_ratio FROM stocks
  WHERE symbol = 'XYZ'; -- might cause division-by-zero error
 INSERT INTO stats (symbol, ratio) VALUES ('XYZ', pe_ratio);
 COMMIT;
EXCEPTION -- exception handlers begin
 WHEN ZERO_DIVIDE THEN -- handles 'division by zero' error
  INSERT INTO stats (symbol, ratio) VALUES ('XYZ', NULL);
  COMMIT;
...
 WHEN OTHERS THEN -- handles all other errors
  ROLLBACK;
END; -- exception handlers and block end here
 
事前定義のPL/SQL 例外(内部例外)
ACCESS_INTO_NULL
 プログラムが未初期化(基本構造的にNULL)オブジェクトの属性に値を代入しようとしたとき。

CASE_NOT_FOUND
 CASE 文のWHEN 句で何も選択されておらず、ELSE 句もない場合。

COLLECTION_IS_NULL
 プログラムがEXISTS 以外のコレクション・メソッドを未初期化(基本構造的にNULL)のネストした表またはVARRAY に適用しようとしたか、または未初期化のネストした表またはVARRAY の要素に値を代入しようとしたとき。

CURSOR_ALREADY_OPEN
 すでにオープンされているカーソルをオープンしようとしたとき。カーソルをオープンするには、一度クローズする必要があります。カーソルFOR ループは、参照するカーソルを自動的にオープンします。このため、ループの内側ではカーソルをオープンできません。

DUP_VAL_ON_INDEX
 UNIQUE 索引によって制約されているデータベース列に、重複した値を格納しようとしたとき。

INVALID_CURSOR
 オープンされていないカーソルをクローズするなど、不正なカーソル操作を実行しようとしたとき。

INVALID_NUMBER
 SQL 文の中で、文字列が正しい数値を表していなかったために、文字列から数値への変換が失敗したとき。(プロシージャ文では、VALUE_ERROR が呼び出されます。)この例外は、バルクFETCH 文のLIMIT 句の式が正数に評価されない場合にも呼び出されます。

LOGIN_DENIED
 不正なユーザー名/ パスワードでOracle にログオンしようとしたとき。

NO_DATA_FOUND
 SELECT INTO 文が行を戻さなかったとき、ネストした表で削除された要素を参照したとき、または索引付き表で未初期化の要素を参照したとき。AVG やSUM などのSQL 集計関数は必ず値またはNULL を戻します。したがって、集計関数をコールするSELECT INTO 文では、NO_DATA_FOUND が呼び出されることはありません。FETCH 文は最終的には行を戻さないと予想されますが、その場合は、例外は呼び出されません。

NOT_LOGGED_ON
 Oracle に接続していないプログラムが、データベース・コールを発行した場合。

PROGRAM_ERROR
 PL/SQL に内部的な問題が発生した場合。

ROWTYPE_MISMATCH
 1 つの代入の中に含まれるホスト・カーソル変数とPL/SQL カーソル変数の戻り型に互換性がない場合。たとえば、オープン・ホスト・カーソル変数をストアド・サブプログラムに渡すとき、実パラメータの戻り型と仮パラメータの戻り型には互換性が必要です。

SELF_IS_NULL
 NULL インスタンスでMEMBER メソッドをコールしようとしたとき。つまり、組込みパラメータSELF がNULLである場合。このパラメータは、常にMEMBER メソッドに最初に渡されるパラメータです。

STORAGE_ERROR
 PL/SQL のメモリーが足りない場合、またはメモリーが破壊されている場合。

SUBSCRIPT_BEYOND_COUNT
 コレクション中の要素数より大きい索引番号を使用してネストした表またはVARRAY の要素を参照した場合。

SUBSCRIPT_OUTSIDE_LIMIT
 有効範囲外(たとえば-1)の索引番号を使用してネストした表またはVARRAY の要素を参照した場合。

SYS_INVALID_ROWID
 文字列が正しいROWID を表していなかったために、文字列からユニバーサルROWID への変換が失敗した場合。

TIMEOUT_ON_RESOURCE
 Oracle がリソースを求めて待機しているときにタイムアウトが発生した場合。

TOO_MANY_ROWS
 SELECT INTO 文が複数の行を戻した場合。

VALUE_ERROR
 算術エラー、変換エラー、切捨てエラー、 またはサイズ制約エラーが発生した場合。たとえば、列値を選択し文字変数に代入するときに、その値が変数の宣言された長さよりも長い場合、PL/SQL はその割当てを異常終了させてVALUE_ERROR を呼び出します。プロシージャ文では、文字列から数値への変換が失敗した場合にVALUE_ERROR が呼び出されます。(SQL 文では、INVALID_NUMBER が呼び出されます。)

ZERO_DIVIDE
 数値をゼロで割ろうとしたとき。
 
ユーザー定義の例外
PL/SQL ブロック、サブプログラムまたはパッケージの宣言部で、ユーザー独自の例外を定義できます。ユーザー定義の例外はRAISE 文によって明示的に呼び出す必要があります。

↑ このページの最初へ

   ご意見・ご感想をお寄せください。 ‖ お問い合わせはこちらから ‖ このサイトについて           サイトマップ  ‖
  Copyright 2006 - 2013 uTRAM Corp. All Rights Reserved
 
PHARCIS(ヘルスケア最新情報提供)
Facebook for PHARCIS
ClinMark8
アクセスランキング
(2013年5月)

1位 企業ニュース
2位 売上ランキング
3位 メディアニュース
4位 製薬会社
5位 治療薬の最前線
6位 決算短信一覧
7位 データブック
8位 製薬会社研究
9位 イベントカレンダ
10位 パイプラインニュース