UPDATE、DELETE、INSERT、および MERGE ステートメントの処理

場合によっては、アプリケーションで位置付けした UPDATE または DELETE を実行する場合に、カーソルを使用する必要があることもあります。 それ以外では、診断メッセージに対してのみ確認する必要があります。

このタスクについて

ステートメントがデータを変更する場合 (UPDATE、DELETE、INSERT、または MERGE) は、診断メッセージの 通常のチェックのほかは、その他のアクションは何も必要ありません。 この場合、SQLRowCount() を 使用すると、その SQL ステートメントが影響を及ぼした行数が分かります。

SQL ステートメントが、位置付け UPDATE または位置付け DELETE の 場合、カーソル を使用する必要があります。 カーソルとは、アクティブな照会ステートメントの結果表の行を指す、 移動可能なポインターのことです。 (この照会ステートメントには FOR UPDATE OF 文節を 入れて、照会が読み取り専用としてオープンされないようにする必要があります。) 組み込み SQL では、カーソル名は行の取り出し、更新、または削除に使用されます。 Db2 ODBCでは、カーソル名は名前でカーソルを参照するときに位置付け UPDATE または DELETE SQL ステートメントにのみ必要です。

プロシージャー

位置付け UPDATE または DELETE をアプリケーションで行うには、以下のようにします。

  1. SELECT ステートメントを出して、結果セットを生成します。
  2. SQLGetCursorName() に電話して、前ステップで生成した結果セット上のカーソル名を取得します。
    このカーソル名を UPDATE または DELETE ステートメントで使用します。
    ヒント: Db2 が自動的に生成する名前を使用してください。 SQLSetCursorName() を使用して独自のカーソル名を定義することもできますが、 Db2 が生成した名前を使用してください。 すべてのエラーメッセージは、 SQLSetCursorName() で定義した名前ではなく、 Db2 で生成された名前を参照しています。
  3. 2 番目のステートメント・ハンドルを割り振って、位置付け UPDATE または DELETE を実行します。

    フェッチされた行を更新または削除するには、2 つのステートメント・ハンドルを 使用します。1 つのハンドルはフェッチ用で、もう 1 つのハンドルは削除の更新用です。 フェッチのステートメント・ハンドルを再利用して、位置付け UPDATE または DELETE を実行する ことはできません。その理由は、位置付け UPDATE または DELETE を実行中はこのハンドルが カーソルを保持しているからです。

  4. SQLFetch() に電話して、結果セットの行にカーソルを配置します。
  5. WHERE CURRENT of 句を使用して UPDATE または DELETE SQL 文を作成し、 ステップ 2 で取得したカーソル名を指定します。
    sprintf((char *)stmtPositionedUpdate,                            
    "UPDATE org SET location = 'San Jose'  WHERE CURRENT of %s",       
     cursorName);
  6. 位置付け UPDATE または DELETE ステートメントを実行します。