構文:
>>---EXEC SQL---.-----------------.--.------------.----->
+--FOR :host_integer-+ +-AT db_name-+
+------ ,-------+
V |
>---UPDATE---table_name-----SET--column_expression----->
>--WHERE CURRENT OF--cursor_name---END-EXEC---><
パラメーター:
:host_integer |
処理されるホスト配列要素の最大数を指定するホスト変数。PIC S9(4) COMP-5 または PIC S9(9) COMP-5 として宣言する必要があります。 |
AT db_name |
DECLARE DATABASE を使用して宣言されたデータベースの名前。この句は必須ではありません。省略すると、DECLARE CURSOR 文に関連付けられている接続に自動的に切り替わります (その接続が現在の接続とは異なる場合。DECLARE CURSOR 文の実行中のみ有効)。 |
table_name |
更新するテーブル。 |
column_expression |
特定の列名の値。この値には式または NULL 値が使用できます。 |
cursor_name |
事前に、宣言、オープン、および取得済みのカーソル。 |
例:
EXEC SQL CONNECT TO 'srv1' USER 'sa' END-EXEC
EXEC SQL DECLARE C1 CURSOR FOR
SELECT last_name, first_name
FROM staff
FOR UPDATE
END-EXEC
EXEC SQL
OPEN C1
END-EXEC
PERFORM UNTIL SQLCODE NOT = ZERO
EXEC SQL
FETCH C1 INTO :fname,:lname
END-EXEC
IF SQLCODE = ZERO
DISPLAY fname " " lname
DISPLAY "Update?"
ACCEPT reply
IF reply = "y"
DISPLAY "New last name?"
ACCEPT lname
EXEC SQL
UPDATE staff
SET last_name=:lname WHERE CURRENT OF c1
END-EXEC
DISPLAY "update sqlcode=" SQLCODE
END-IF
END-IF
END-PERFORM
EXEC SQL DISCONNECT ALL END-EXEC
STOP RUN.
説明:
UPDATE が DECLARE CURSOR 文の一部である場合は、FOR 句を使用しないでください。
実行後は、処理された要素の数が SQLERRD(3) に含まれます。UPDATE の場合、これは更新された行の合計数です。
ODBC では位置指定更新がサポートされます。位置指定更新は、拡張構文でカーソルを使って最後に取得された行を更新します (ODBC 1.0 では主要構文で更新されていましたが、ODBC 2.0 では拡張構文に移行しました)。すべてのドライバーが位置指定更新をサポートしているわけではありません。ただし、OpenESQL では、位置指定更新および位置指定削除が容易にできるように、ODBC カーソル名を COBOL カーソル名と同じ名前に設定します。
ODBC ドライバーによっては、位置指定更新を有効にするために、カーソルで使用される SELECT 文に FOR UPDATE 句を含める必要があります。
標準 SQL 文で使用される UPDATE のもう 1 つの形式は、検索更新と呼ばれます。
位置指定更新ではホスト配列を使用できません。
ほとんどのデータ ソースでは、SCROLLOPTION および CONCURRENCY の特定の組み合わせを、SET 文または DECLARE CURSOR 文で指定する必要があります。
ODBC カーソルのライブラリにより、位置指定更新の制限付き実装が提供されます。SQL(USECURLIB=YES) でコンパイルし、SCROLLOPTION STATIC および CONCURRENCY OPTCCVAL (または OPTIMISTIC) を使用することで、その更新を行えます。