UPDATE (位置指定)

DataRows カーソルの使用によって最後にフェッチされた DataRow を削除します。

構文:

>>-EXEC ADO-.--------------------.--UPDATE-datatable_name---->
            +-USING dataset_name-+

         +-----------  ,  -----------+
         V                           |
>--SET---column_name = -+- :hvar-----+----------------------->
                       -+- col_value-+


>--WHERE CURRENT OF--datarows_name---END-EXEC----------------><

パラメーター:

dataset_name 使用する DataSet 参照。dataset_name を指定しない場合は、現在の DataSet が使用されます。
datatable_name 更新する DataTable の名前。
column_name 更新する列。
hvar 列値を含むホスト変数。
col_value 列値。
datarows_name 宣言後に開かれ、取り込まれた DataRows カーソル。

説明:

EXEC ADO は、位置指定更新をサポートします。ただし、すべての ADO.NET データ プロバイダーが、位置指定更新をサポートするわけではありません。

ADO.NET データ プロバイダーによっては、カーソルが使用する SELECT 文に、位置指定更新を有効にする FOR UPDATE 句を含める必要があります。

EXEC ADO 文で使用されるもう 1 つの形式の UPDATE は、検索更新と呼ばれます。

位置指定更新ではホスト配列を使用できません。

ほとんどのデータ ソースでは、特定の組み合わせの SCROLLOPTION と CONCURRENCY を SET 文または DECLARE CURSOR 文で指定する必要があります。

例:

* Declare the cursor
     EXEC ADO
        DECLARE c1 DATAROWS FROM oline
     END-EXEC

* Open the cursor
     EXEC ADO
        OPEN c1 
     END-EXEC

* Modify the table using positioned updates and deletes
     PERFORM UNTIL EXIT
        * Delete row 1, 4, 7, ...
        EXEC ADO FETCH c1 INTO :oline END-EXEC
        IF SQLCODE NOT = 0
           EXIT PERFORM
        END-IF 
        EXEC ADO DELETE FROM oline WHERE CURRENT OF c1 END-EXEC
				
        * Update row 2, 5, 8, ...
        EXEC ADO FETCH c1 INTO :oline END-EXEC
        IF SQLCODE NOT = 0
           EXIT PERFORM
        END-IF
        MOVE 99 TO qty
        EXEC ADO UPDATE oline SET qty = :qty WHERE CURRENT OF c1 END-EXEC
				
        * Leave alone row 3, 6, 9, ...
        EXEC ADO FETCH c1 INTO :oline END-EXEC
        IF SQLCODE NOT = 0
           EXIT PERFORM
        END-IF
     END-PERFORM