Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
カーソルの現在位置のデータを変更します。
UPDATE WHERE CURRENT OF cursor-name { USING [ SQL ] DESCRIPTOR sqlda-name | { [ FROM ] | [ USING ] } hostvar-list }
UPDATE update-table, ... SET set-item, ... WHERE CURRENT OF cursor-name
hostvar-list : indicator variables allowed
update-table : [owner-name.]object-name [ [ AS ] correlation-name ]
set-item : [ correlation-name.]column-name = { expression | DEFAULT } | [owner-name.]object-name.column-name = { expression | DEFAULT }
object-name :identifier (テーブルまたはビューの名前)
sqlda-name : identifier
USING DESCRIPTOR 句 変数に代入する場合、その変数がすでに宣言済みであることが必要です。また、変数名は「アット」記号 (@) で始めます。変数の代入とカラムの代入は混在させることができ、任意の数を使用できます。SET リストの代入の左辺にある名前が、更新されたテーブルのカラムと変数名に一致する場合、UPDATE 文はカラムを更新します。
SET 句 set-item で参照されるカラムは、更新対象となるテーブルまたはビューに配置してください。エイリアスや、他のテーブルまたはビューからのカラムは参照できません。更新するテーブルまたはビューにカーソル指定で相関名が与えられている場合は、SET 句に相関名を使用してください。
各 set-item は 1 つの update-table に関連付けられ、カーソルのクエリで一致するテーブルの対応するカラムは修正されます。expressionは UPDATE リストに指定されているテーブルのカラムを参照します。また、+、-、...、COALESCE、IF などの演算子を使用すると、定数、ホスト変数、変数、クエリの SELECT リストからの式、またはそれらを組み合わせて使用できます。式は、カーソルのクエリから式のエイリアスを参照できません。また、UPDATE リストにあるカーソルのクエリの他のテーブルにあるカラムを参照することもできません。subselect、サブクエリ述部、集合関数は、set-items に使用できません。
各 update-table は、次のように、カーソルのクエリにあるテーブルとマッチングされます。
相関名を指定した場合、同じ table-or-view-name と同じ correlation-name を持つカーソルのクエリにあるテーブルとマッチングされます。
それ以外の場合、相関名が指定されていない同じ table-or-view-name を持つカーソルのクエリにテーブルがあるとき、または table-or-view-name と同じ相関名を持つとき、更新テーブルはカーソルのクエリのテーブルとマッチングされます。
それ以外の場合、更新テーブルと同じ table-or-view-name を持つカーソルのクエリに単一のテーブルがある場合、更新テーブルはカーソルのクエリにあるテーブルとマッチングされます。
カラムにデフォルトが定義されている場合は、SET 句を使用してカラムをデフォルト値に設定できます。この例については、UPDATE 文の例の項を参照してください。
この形式の UPDATE 文は、指定されたカーソルの現在のローを更新します。現在のローを、カーソルからフェッチされた最後のローとして定義します。カーソルに対する最後のオペレーションを位置付けられた DELETE 文にしないでください。
構文 1 では、SQLDA からのカラム、またはホスト変数リストからの値は、指定したカーソルから返されるカラムに 1 対 1 で対応します。SQLDA の sqldata ポインターが NULL ポインターの場合、該当する SELECT リスト項目は更新されません。
構文 2 では、要求されたカラムは指定されたクエリの現在のローに指定された値に設定されています。カラムは、指定した開いているカーソルの SELECT リストの中になくてもかまいません。このフォーマットは準備できます。
また、変数に代入する場合、その変数がすでに宣言済みであることが必要です。また、変数名は「アット」記号 (@) で始めます。変数の代入とカラムの代入は混在させることができ、任意の数を使用できます。SET リストの代入の左辺にある名前が、更新されたテーブルのカラムと変数名に一致する場合、UPDATE 文はカラムを更新します。
USING DESCRIPTOR、FROM hostvar-list、hostvar 形式を使用できるのは、ESQL の場合だけです。
更新するカラムに対する UPDATE パーミッションが必要です。
なし
SQL/2008 構文 1 はベンダー拡張です。構文 2 は SQL/2008 標準のコア機能です。Embedded SQL プログラムで使用される構文 2 は、オプションの SQL 言語機能 B031、"Basic dynamic SQL" の一部です。更新されるテーブルを複数指定できる機能は、ベンダー拡張です。
更新できるカーソルの範囲は、ansi_update_constraints オプションの設定によって異なります。順序付けされている (つまり、SQL クエリに ORDER BY 句が指定されている) カーソルの位置付け更新を実行する機能は、オプションの SQL/2008 言語機能 F831 "Full cursor update" を構成します。より複雑な SQL 構成での位置付け更新の実行には、追加のベンダー拡張が関与することがあります。
次は、UPDATE 文の WHERE CURRENT OF カーソルの例です。
UPDATE Employees SET Surname = 'Jones' WHERE CURRENT OF emp_cursor;