-510   THE TABLE DESIGNATED BY THE CURSOR OF THE UPDATE OR DELETE STATEMENT CANNOT BE MODIFIED

説明

アプリケーション・プログラムが、更新または削除できない表またはビューに対して、 UPDATE または DELETE WHERE CURRENT OF カーソル・ステートメントを実行しようとしました。 このエラーは、以下の理由で戻されることがあります。
  • 読み取り専用ビューからの削除や、カーソルが FOR UPDATE 文節で定義されていない 場合の更新が実行された。
  • ターゲット表がリモート・ロケーションに存在している場合で、ユーザーがカーソルを FOR FETCH ONLY として明示的に宣言したため、 または、アプリケーションが CURRENTDATA (NO) でバインドされてカーソルがあいまいであるために、 Db2® がブロック取り出しを行った。
  • Db2 が並列処理を利用して DELETE WHERE CURRENT OF カーソル・ステートメントで 指定されたカーソルに関連する SELECT ステートメントを実行した場合、または カーソルが位置付けられてから (CURRENTDATA(NO) でバインドしたアプリケーション の未確定カーソルに対する ISO(CS) のセマンティクスに従って) 他のアプリケーションによって 変更されていないことを Db2 が保証できない行に対して DELETE WHERE CURRENT OF が 実行された。
  • カーソルが INSTEAD OF UPDATE トリガーが定義されているビューを参照している (そのビューが更新可能ビューの場合でも)。

システムの処置

このステートメントを処理することはできません。オブジェクト表のデータの更新または削除は行われません。

プログラマーの応答

要求された UPDATE または DELETE は実行できません。

リモート表の場合は、DECLARE CURSOR を修正して、PLAN を再バインドしてください。

並列処理を使用するカーソルの場合、静的 SQL の DEGREE(1) BIND オプションを使うか、 または動的 SQL の CURRENT DEGREE 特殊レジスターを '1' に設定することによって、 並列照会処理を使用不可にしてください。

CURRENTDATA(NO) でバインドしたアプリケーション内のカーソルがあいまいな場合は、 カーソルがあいまいでないようにするか (FOR UPDATE OF で宣言する)、 アプリケーションを CURRENTDATA(YES) で再バインドしてください。

INSTEAD OF トリガーを持つビューについては、これらのトリガーをドロップしてください。

SQLSTATE

42828