バージョン 6.3.3
 —  ステートメント  —

UPDATE - SQL

このドキュメントでは、次のトピックについて説明します。


機能

SQL UPDATE ステートメントは、カーソルを使用しないでテーブル内の行に対して UPDATE(更新)処理を実行したり("検索済" UPDATE)、カーソルが位置づけられた行の列に対して更新処理を実行したり("位置決め" UPDATE)するために使用します。

Top of page

構文説明

2 つの異なる構造が可能です。

構文 1 - 検索済 UPDATE

"検索済" UPDATE ステートメントは、どの SELECT ステートメントにも関連しない独立したステートメントです。 単一のステートメントで、テーブルのゼロ、1 つ、複数、またはすべての行を更新できます。 更新される行はテーブルに適用する search-condition によって決定されます。 オプションで、ビュー名およびテーブル名に correlation-name を割り当てることができます。

注意:
"検索済" UPDATE で実際に更新された行の数は、システム変数 *ROWCOUNT(『システム変数』ドキュメントを参照)で確認できます。

UPDATE

view-name [correlation-nameSET *

table-name [correlation-nameSET assignment-list
  [WHERE search-condition]

WITH

RR
RS
CS

[QUERY NO integer]            

構文図で使用されている記号については、「構文記号」を参照してください。

構文要素の説明 - 構文 1:

view-name
ビュー名:

DEFINE DATA ステートメントでの定義に従って Natural ビューの名前を参照します。 詳細については、「基本構文項目」の view-name を参照してください。

SET
SET 節:

ビューに更新を指定している場合は、ビューのすべての列が更新される必要があるので、SET 節にアスタリスク(*)を指定する必要があります。

テーブルに更新を指定している場合は、SET 節には assignment-list または更新する列を含むビューの名前を指定する必要があります。

assignment-list 下記の「割り当てリスト」を参照してください。
WHERE search-condition
WHERE 節:

この節では、更新する行の選択条件を指定します。

WHERE 節を指定しないと、テーブル全体が更新されます。

割り当てリスト

column-name =

scalar-expression NULL

assignment-list では、1 つ以上の列に値を割り当てることができます。 値は scalar-expression または "NULL" のいずれかです。 詳細については、「スカラー式」を参照してください。

値 "NULL" が割り当てられている場合は、指定されたフィールドに値(値 "0" または "空白"でも)は含まれないことを意味します。

SQL 拡張セット

次の構文要素は SQL 拡張セットに含まれます。

correlation-name 項目 correlation-name は、table-name のエイリアス名を表します。 詳細については、「基本構文項目」の correlation-name を参照してください。
WITH
WITH 分離レベル節:

この節では、更新する行を検索するときに使用する分離レベルを明示的に指定できます。 DB2 データベースにのみ有効です。 他のデータベースに使用すると、ランタイムエラーが発生します。

QUERYNO integer
QUERYNO 節:

この節は、現在はサポートされていないため無視されます。

構文 2 - 位置決め UPDATE

"位置決め" 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
ビュー名:

DEFINE DATA ステートメントでの定義に従って Natural ビューの名前を参照します。 詳細については、「基本構文項目」の view-name を参照してください。

SET *

SET assignment-list

SET 節:

ビューに更新を指定している場合は、ビューのすべての列が更新される必要があるので、SET 節にアスタリスク(*)を指定する必要があります。

テーブルに更新を指定している場合は、SET 節には assignment-list または更新する列を含むビューの名前を指定する必要があります。

WHERE CURRENT OF CURSOR (r)
ステートメント参照:

(r) 表記を使用して、更新する行の選択に使用されたステートメントを参照します。 ステートメント参照の指定がない場合、UPDATE ステートメントは、データベースレコードが選択された一番内側のアクティブな処理ループを参照します。

FOR ROW … OF ROWSET
FOR ROW … OF ROWSET 節:

この節は SQL 拡張セットに含まれます。

位置決め SQL UPDATE ステートメント用のオプションの FOR ROW ... OF ROWSET 節では、現在の行セットで更新する行を指定します。 UPDATE ステートメントが関連する SELECT ステートメントで行セットの位置決めを使用し、その INTO 節に列の配列が含まれる場合にのみ指定する必要があります。

この節を指定しない場合、現在の行セットのすべての行が assignment-list 内の値で更新されます。

view-name SET * を指定している場合、この節は指定できません。

Top of page

例 1 - 検索済 UPDATE

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' 
...

例 2 - assignment-list を使用した検索済 UPDATE

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' 
...

例 3 - 位置決め UPDATE

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
...

例 4 - assignment-list を使用した位置決め UPDATE

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
...

Top of page