-222   AN UPDATE OR DELETE OPERATION WAS ATTEMPTED AGAINST A HOLE USING CURSOR cursor-name

説明

Db2® は、SENSITIVE STATIC と定義されたカーソル cursor-name を使用した、 位置付け更新または位置付け削除を処理できませんでした。 指定されたカーソルがホールであるオブジェクト表の行に位置付けられた時に、アプリケーション・プログラムが UPDATE または DELETE WHERE CURRENT OF カーソル・ステートメントを実行しようとしました。更新または削除するためにカーソルが位置付けられる各行は、ホールであってはなりません。
  • 更新ホールは、基礎表の対応する行が更新されていて、更新行が、 カーソルの SELECT ステートメントで指定された検索条件を満たさなくなったときに発生します。
  • 削除ホールは、基礎表の対応する行が削除されていたときに発生します。
このエラーは、次の状況になった場合に発生する可能性があります。
  • カーソルが行セット・カーソルでない場合、現行カーソル位置に対応する行は、更新ホールまたは削除ホールです。Db2 は、カーソル cursor-name の結果表の現在行を更新または削除しようとして、基礎表の対応する行を見つけられなかったときに、これらのホールを検出します。
  • カーソルが行セット・カーソルである場合は、現行行セット・カーソル位置の行に対応する行が、更新ホールまたは削除ホールです。Db2 は、カーソル cursor-name の結果表の現在行を更新または削除しようとして、基礎表の対応する行を見つけられなかったときに、これらのホールを検出します。

システムの処置

このステートメントを処理することはできません。 データは更新または削除されませんでした。カーソル位置は変更されません。

プログラマーの応答

アプリケーション・プログラムのロジックを訂正して、DELETE または UPDATE ステートメントが実行される前に、オブジェクト表の意図した行にカーソルが正しく位置づけられていること、およびその意図した行がホール でないことを確認してください。
  • カーソルが行セット・カーソルでない場合は、ホールでない行にカーソルを位置付けるための FETCH ステートメントを発行してください。さらに、UPDATE または DELETE ステートメントを再発行してください。
  • カーソルが行セット・カーソルであり、位置付けられた UPDATE または DELETE ステートメントが、現行行セット・カーソル位置の行に対応する単一行に影響するように意図されたものである場合は (つまり ROWSET 文節の FOR ROW n が指定された場合は)、UPDATE または DELETE ステートメントを変更して、ホールでない行を 1 つずつ処理してください。
  • カーソルが行セット・カーソルであり、位置付けられた UPDATE または DELETE ステートメントが、現行行セット・カーソル位置の行に対応するすべての行に影響するように意図されたものである場合は (つまり ROWSET 文節の FOR ROW n が指定されなかった場合は)、UPDATE または DELETE ステートメントを変更して、ホールでない行を 1 つずつ処理してください。ROWSET 文節の FOR ROW n を UPDATE または DELETE ステートメントへ追加して、カーソルのどの行を更新または削除するかを指示してください。

SQLSTATE

24510