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 障害が返されます。 |