-504   CURSOR NAME cursor-name IS NOT DECLARED

説明

カーソル cursor-name が SQL ステートメントで参照されましたが、 次のいずれかの状態でした。
  • アプリケーション・プログラムまたは SQL ルーチンで参照前に (DECLARE CURSOR ステートメントを 使用して) カーソル cursor-name が宣言されなかったか、 (ALLOCATE CURSOR ステートメントを使用して) 割り振られませんでした。
  • 位置づけ UPDATE または DELETE ステートメントでカーソル cursor-name を 参照しましたが、割り当て済みカーソルに対してサポートされた操作ではありません。
  • カーソル cursor-name が割り振られましたが、 cursor-name を指定した CLOSE カーソル・ステートメントが出され、 カーソルの参照前にカーソルの割り振りが解除されました。
  • カーソル cursor-name が割り振られましたが、 ROLLBACK 操作が実行され、このカーソルの参照前にカーソルの割り振りが解除されました。
  • カーソル cursor-name が割り振られましたが、 ストアード・プロシージャー内で宣言され関連付けられたカーソルが WITH HOLD 宣言されず、 COMMIT 操作が実行されてこのカーソルの参照前にカーソルの割り振りが解除されました。COMMIT 操作は、明示的 (COMMIT ステートメント) であるか、 または暗黙的 (このカーソルの参照前に COMMIT_ON_RETURN = 'Y' として 定義されたストアード・プロシージャーが呼び出された) であるかのいずれかです。
  • カーソル cursor-name が割り振られましたが、 カーソルが割り振られたために関連するストアード・プロシージャーが再度呼び出され、 新しい結果セットが戻され、カーソル cursor-name の割り振りが解除されました。
  • カーソル cursor-name の宣言が、cursor-name という名前のカーソルへの参照の有効範囲内にありませんでした。

システムの処置

このステートメントを処理することはできません。

プログラマーの応答

アプリケーション・プログラムまたは SQL ルーチンが完全であり、 カーソル宣言時または割り当て時にスペルの誤りがないことを検査してください。 カーソルの宣言または割り当ては、アプリケーション・プログラムまたは SQL ルーチン内でカーソルを 参照する SQL ステートメントの前になければなりません。

cursor-name が <UNKNOWN> である場合は、 カーソルは正常に宣言または割り振られていません。 このエラーは、SQL (Db2®) が使用され、プリコンパイル中に警告メッセージが出されたときに発生する可能性があります。DECLARE CURSOR または ALLOCATE CURSOR ステートメントの 警告メッセージに対するプリコンパイル出力を検査して、当該ステートメントを訂正してください。

割り当て済みカーソルの場合、カーソルが正常に割り当てられたあと、暗黙的または明示的な COMMIT、 ROLLBACK、または CLOSE が実行された場合は、アプリケーション・プログラムのロジックを変更して 以下のいずれかのアクションを実行してください。
  • COMMIT、ROLLBACK、または CLOSE 操作後に、関連するストアード・プロシージャーを再度呼び出して、 ASSOCIATE LOCATORS および ALLOCATE CURSOR ステートメントを再発行する。
  • COMMIT の場合は、ストアード・プロシージャー内の関連するカーソル を WITH HOLD 宣言し、COMMIT 操作によってカーソルの割り振りが解除されないようにする。

割り当て済みカーソルの場合、関連するストアード・プロシージャーが再度呼び出され、 カーソルが割り当てられたために新しい結果セットが戻された場合は、 ASSOCIATE LOCATORS および ALLOCATE CURSOR ステートメントを再発行してください。

SQLSTATE

34000