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