CURRENT_EXCEPTION の属性
SQLスクリプトでは、例外ハンドラー内で例外の属性を取得できます。
詳細については、以下も参照してください。
| • | SQL スクリプトの例外 |
| • | Exception の発生と処理 |
| • | 外部 Exception |
| • | DECLARE EXCEPTION |
構文
CURRENT_EXCEPTION.<attribute>
備考
次の表で、カーソルの例外属性について説明します。
|
属性 |
説明 |
|
NAME |
例外の名前である文字列。この名前は、次のように完全修飾されています。 /ns1/ns2/procedure.s1.s2.exceptionName ns1とns2は、パスの名前空間エレメントです。 s1とs2は複合ステートメントブロックであり、そのブロックのラベルに従って名前が付けられるか、unnamed#として名前が付けられます。# は整数値です。 |
|
ID |
例外のシステムIDである整数。すべてのユーザー例外のIDは-1(負の値)です。システム例外はすべて一意のIDを持っています。 |
|
MESSAGE |
現在の例外に対して定義されたVARCHAR(255)値。例外に値が定義されていない場合、この属性はNULLです。 |
|
TRACE |
定義されたVARCHAR(32768)値には、例外スタックトレースが文字列として含まれています。 |
例外ハンドラーに複合ステートメントが含まれている場合、BEGIN 部分内の CURRENT_EXCEPTION は親スコープの現在の例外を参照しますが、子スコープの例外ハンドラー部分内では CURRENT_EXCEPTION はローカル例外を参照し、親例外にアクセスする方法はありません。詳細については、「複合ステートメント」を参照してください。
例
PROCEDURE p (IN x INTEGER, OUT result VARCHAR)
BEGIN
CALL /shared/f(x);
EXCEPTION
ELSE
IF CURRENT_EXCEPTION.MESSAGE IS NOT NULL THEN
SET result = CURRENT_EXCEPTION.MESSAGE;
ELSE
SET result = CURRENT_EXCEPTION.NAME;
END
END
MESSAGE: 'x must be > 0. x = -123'
NAME: '/shared/f.illegal_arg_ex'
SQL スクリプトの例外
以下は、スローされる可能性のあるSQLスクリプト例外のリストです。渡されるメッセージは、SQLスクリプトの作成者に残されます。
|
例外メッセージ |
説明 |
|
CouldExecuteSelectException |
SELECTステートメントを実行しようとしました。 SELECTステートメントは開かれ、実行されません。 INSERT、UPDATE、およびDELETEステートメントが実行されます。 |
|
CouldOpenCursorException |
NULL参照変数であるか、すでに閉じられている現在のプロシージャー内で定義されていないカーソルであるカーソルを開こうとしました。 |
|
CouldOpenNonSelectException |
INSERT、UPDATE、またはDELETEステートメントを開こうとしました。 INSERT、UPDATE、およびDELETEステートメントは実行されますが、開かれません。 SELECTステートメントが開かれます。 |
|
CursorAlreadyOpenException |
すでに開いているカーソルを開こうとしました。 |
|
CursorNotOpenException |
閉じているカーソルからフェッチしたり、カーソルを閉じたり、閉じているPIPEに挿入したり閉じたりしようとします。 |
|
CursorTypeMismatchException |
動的SQLを使用してカーソルを開こうとしましたが、SQLからの射影がカーソルのタイプ定義と一致しません。 |
|
DuplicateNameException |
何かに名前を付けようとしましたが、その名前はすでに使用されています。 |
|
EvaluationException |
式の評価中にエラーが発生しました。 |
|
IllegalArgumentException |
引数が不正な値でプロシージャに渡されます。 |
|
IllegalStateException |
予期しない状態が発生したため、プロシージャはタスクを実行できません。 |
|
NotAllowedException |
ポリシーの制限またはその他の制限のために許可されていないタスクを実行しようとしました。 |
|
NotFoundException |
存在しないリソースまたはその他のアイテムを使用しようとしました。 |
|
NotSupportedException |
サポートされていない機能を使用しようとしました。 |
|
NullVariableException |
NULL変数のデータメンバーにアクセスしようとしました。たとえば、現在NULLであるROW変数のデータメンバーにアクセスするには。 |
|
ParseException |
動的SQLステートメントは、正しく解析または解決できません。これは、構文エラー、または存在しない列、テーブル、プロシージャ、または関数への参照が原因である可能性があります。 |
|
PipeNotOpenException |
すでに閉じられているパイプに挿入または閉じようとします。 |
|
ProcedureClosedException |
呼び出し元または管理者によって中止されたため、システムによってプロシージャが強制的に閉じられました。 |
|
ProtocolException |
データプロトコルの処理エラーが原因でタスクが失敗します。 |
|
SecurityException |
適切な権限なしでアクションを実行しようとしました。 |
|
SystemException |
ランタイムで一般的な障害が発生しました |
|
TransactionClosedException |
トランザクションがコミットまたはロールバックされた後、トランザクションタスク(カーソルからのフェッチなど)を実行しようとします。 |
|
TransactionFailureException |
トランザクション障害が発生します。 |
|
UnexpectedRowCountException |
カーソルに予期しない数の行が返されます。たとえば、SELECT INTOステートメントでは、カーソルが正確に1行を返す必要があります。 |
|
UnopenedCursorReturnedException |
未開封のカーソルがプロシージャから返されます。カーソルはNULLであるか、返されるときに開いている必要があります。 |
|
SOAPFaultException |
WebサービスからSOAP障害が返されます。 |