場合によっては、アプリケーションで位置付けした UPDATE または DELETE を実行する場合に、カーソルを使用する必要があることもあります。 それ以外では、診断メッセージに対してのみ確認する必要があります。
このタスクについて
ステートメントがデータを変更する場合 (UPDATE、DELETE、INSERT、または
MERGE) は、診断メッセージの
通常のチェックのほかは、その他のアクションは何も必要ありません。 この場合、SQLRowCount() を
使用すると、その SQL ステートメントが影響を及ぼした行数が分かります。
SQL ステートメントが、位置付け UPDATE または位置付け DELETE の
場合、カーソル を使用する必要があります。 カーソルとは、アクティブな照会ステートメントの結果表の行を指す、
移動可能なポインターのことです。 (この照会ステートメントには FOR UPDATE OF 文節を
入れて、照会が読み取り専用としてオープンされないようにする必要があります。) 組み込み SQL では、カーソル名は行の取り出し、更新、または削除に使用されます。 Db2 ODBCでは、カーソル名は名前でカーソルを参照するときに位置付け UPDATE または DELETE SQL ステートメントにのみ必要です。
プロシージャー
位置付け UPDATE または DELETE をアプリケーションで行うには、以下のようにします。
- SELECT ステートメントを出して、結果セットを生成します。
-
SQLGetCursorName() に電話して、前ステップで生成した結果セット上のカーソル名を取得します。このカーソル名を UPDATE または DELETE ステートメントで使用します。
ヒント: Db2 が自動的に生成する名前を使用してください。 SQLSetCursorName() を使用して独自のカーソル名を定義することもできますが、 Db2 が生成した名前を使用してください。 すべてのエラーメッセージは、 SQLSetCursorName() で定義した名前ではなく、 Db2 で生成された名前を参照しています。
- 2 番目のステートメント・ハンドルを割り振って、位置付け UPDATE または DELETE を実行します。
フェッチされた行を更新または削除するには、2 つのステートメント・ハンドルを
使用します。1 つのハンドルはフェッチ用で、もう 1 つのハンドルは削除の更新用です。 フェッチのステートメント・ハンドルを再利用して、位置付け UPDATE または DELETE を実行する
ことはできません。その理由は、位置付け UPDATE または DELETE を実行中はこのハンドルが
カーソルを保持しているからです。
-
SQLFetch() に電話して、結果セットの行にカーソルを配置します。
- WHERE CURRENT of 句を使用して UPDATE または DELETE SQL 文を作成し、 ステップ 2 で取得したカーソル名を指定します。
sprintf((char *)stmtPositionedUpdate,
"UPDATE org SET location = 'San Jose' WHERE CURRENT of %s",
cursorName);
- 位置付け UPDATE または DELETE ステートメントを実行します。