このドキュメントでは、次のトピックについて説明します。
SQL UPDATE
ステートメントは、カーソルを使用しないでテーブル内の行に対して UPDATE
(更新)処理を実行したり("検索済" UPDATE
)、カーソルが位置づけられた行の列に対して更新処理を実行したり("位置決め" UPDATE
)するために使用します。
2 つの異なる構造が可能です。
"検索済" UPDATE
ステートメントは、どの SELECT
ステートメントにも関連しない独立したステートメントです。 単一のステートメントで、テーブルのゼロ、1 つ、複数、またはすべての行を更新できます。 更新される行はテーブルに適用する search-condition によって決定されます。 オプションで、ビュー名およびテーブル名に correlation-name を割り当てることができます。
注意:
"検索済" UPDATE
で実際に更新された行の数は、システム変数 *ROWCOUNT
(『システム変数』ドキュメントを参照)で確認できます。
UPDATE
|
view-name [correlation-name] SET *
|
||||||||||||
table-name [correlation-name] SET assignment-list
|
|||||||||||||
[WHERE search-condition]
|
WITH
|
RR RS CS |
[QUERY NO integer]
|
構文図で使用されている記号については、「構文記号」を参照してください。
構文要素の説明 - 構文 1:
view-name |
ビュー名:
|
---|---|
SET |
SET 節:
ビューに更新を指定している場合は、ビューのすべての列が更新される必要があるので、 テーブルに更新を指定している場合は、 |
assignment-list | 下記の「割り当てリスト」を参照してください。 |
WHERE search-condition |
WHERE 節:
この節では、更新する行の選択条件を指定します。
|
column-name = | scalar-expression NULL
|
assignment-list では、1 つ以上の列に値を割り当てることができます。 値は scalar-expression または "NULL" のいずれかです。 詳細については、「スカラー式」を参照してください。
値 "NULL" が割り当てられている場合は、指定されたフィールドに値(値 "0" または "空白"でも)は含まれないことを意味します。
次の構文要素は SQL 拡張セットに含まれます。
correlation-name | 項目 correlation-name は、table-name のエイリアス名を表します。 詳細については、「基本構文項目」の correlation-name を参照してください。 |
---|---|
WITH |
WITH 分離レベル節:
この節では、更新する行を検索するときに使用する分離レベルを明示的に指定できます。 DB2 データベースにのみ有効です。 他のデータベースに使用すると、ランタイムエラーが発生します。 |
QUERYNO integer |
QUERYNO 節:
この節は、現在はサポートされていないため無視されます。 |
"位置決め" UPDATE
ステートメントは、常にデータベースループ内のカーソルを参照します。 したがって、位置決め UPDATE
ステートメントで参照されるテーブルまたはビューは、対応する SELECT
ステートメントで参照されるテーブルまたはビューと同一のものである必要があります。そうでない場合はエラーメッセージが返されます。 位置決め UPDATE
を非カーソル選択で使用することはできません。
一般セットの構文
UPDATE
|
view-name SET *
|
[WHERE CURRENT OF CURSOR (r)]
|
||
view-name SET assignment-list
|
拡張セットの構文
UPDATE
|
view-name SET *
|
[WHERE CURRENT OF CURSOR (r)
|
FOR ROW |
[:]host-variable | OF ROWSET |
||||||
view-name SET assignment-list
|
integer |
構文要素の説明 - 構文 2:
view-name |
ビュー名:
|
---|---|
SET *
SET assignment-list |
SET 節:
ビューに更新を指定している場合は、ビューのすべての列が更新される必要があるので、 テーブルに更新を指定している場合は、 |
WHERE CURRENT OF CURSOR (r) |
ステートメント参照:
|
FOR ROW … OF ROWSET |
FOR ROW … OF ROWSET 節:
この節は SQL 拡張セットに含まれます。 位置決め SQL この節を指定しない場合、現在の行セットのすべての行が assignment-list 内の値で更新されます。 view-name |
DEFINE DATA LOCAL 1 PERS VIEW OF SQL-PERSONNEL 2 NAME 2 AGE ... END-DEFINE ... ASSIGN AGE = 45 ASSIGN NAME = 'SCHMIDT' UPDATE PERS SET * WHERE NAME = 'SCHMIDT' ...
DEFINE DATA LOCAL 1 PERS VIEW OF SQL-PERSONNEL 2 NAME 2 AGE ... END-DEFINE ... UPDATE SQL-PERSONNEL SET AGE = AGE + 1 WHERE NAME = 'SCHMIDT' ...
DEFINE DATA LOCAL 1 PERS VIEW OF SQL-PERSONNEL 2 NAME 2 AGE ... END-DEFINE ... SELECT * INTO PERS FROM SQL_PERSONNEL WHERE NAME = 'SCHMIDT' COMPUTE AGE = AGE + 1 UPDATE PERS SET * WHERE CURRENT OF CURSOR END-SELECT ...
DEFINE DATA LOCAL 1 PERS VIEW OF SQL-PERSONNEL 2 NAME 2 AGE ... END-DEFINE ... SELECT * INTO PERS FROM SQL-PERSONNEL WHERE NAME = 'SCHMIDT' UPDATE SQL-PERSONNEL SET AGE = AGE + 1 WHERE CURRENT OF CURSOR END-SELECT ...