指定されたテーブルの指定された列に新しい値を設定します。
Synopsis
UPDATE [restriction] table value-assignment-statement
[WHERE condition-expression]
UPDATE [restriction] table value-assignment-statement
[WHERE CURRENT OF cursor [AND condition-expression]]
where value-assignment-statement can be:
SET columns = scalar-expressions
SET columns = [(columns)] VALUES (scalar-expressions)
SET columns = [(columns)] VALUES host-variable
UPDATE 文は、テーブルの列の既存値を変更します。テーブルの行の更新は、直接行う方法と、ビューを使用した方法があります。ビューを使用して更新する場合は、
CREATE VIEW で説明されているように、必要条件や制限事項に従います。
UPDATE 文は、既存のベース・テーブルの行 (単独もしくは複数) に、新規の列の値を提供します。更新には、2 つの構文が利用できます。
WHERE 節または
WHERE CURRENT OF 節が更新の範囲を制限しない限り、すべての更新はテーブル全体を更新するとみなされます。例えば以下のようになります。
UPDATE Employees
SET StatusDate = '05/12/98', status = 'Purged'
WHERE status = 'Completed'
column-list 引数はオプションです。使用される場合、それは更新したい列の コンマで区切られたリストとなります。省略される場合、すべての列が更新されるとみなされます。
UPDATE オペレーションは全か無かのイベントです。指定された列をすべて更新するか、まったくしないかのいずれかです。
Caché は、
UPDATE の成功か失敗かを示した、ステータス変数 SQLCODE を返します。また、
UPDATE オペレーションは %ROWCOUNT ローカル変数を、更新された行の数に設定します。
-
%NOCHECK ビュー経由で
UPDATE を実行する際、ビューの WITH CHECK OPTION 検証は実行されません。
-
%NOLOCK
UPDATE 時に行をロックしません。単独のユーザ/処理がデータベースを更新する際にのみ使用します。
-
%NOINDEX インデックス・マップは
UPDATE 処理中には設定されません。
-
%NOTRIGGER ベース・テーブル・トリガは
UPDATE 処理中にはかかりません (実行されません)。BEFORE トリガおよび AFTER トリガのどちらも実行されません。
%NOLOCK を指定しない場合、Caché は、
INSERT、
UPDATE、および
DELETE 操作時に標準のロックを実行します。一意フィールドの値は、現行のトランザクションの間、ロックされます。ロックしきい値は、テーブルごとに 1000 ロックです。そのため、トランザクション時にテーブルから 1000 を超える一意フィールド値を更新する場合は、ロックしきい値に到達し、Caché はロック・レベルを自動的に、一意フィールド値ロックからテーブル・ロックへと上げます。これによってトランザクション時に、ロック・テーブルをオーバーフローすることなく、大規模な更新を実行できます。ロックの詳細は、このドキュメントの "SQL の概念" の "
トランザクション" を参照してください。