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