この文は、カーソルの現在の位置でデータを修正するために使用します。
UPDATE WHERE CURRENT OF cursor-name { USING DESCRIPTOR sqlda-name | FROM 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 (a table or view name)
sqlda-name : identifier
USING DESCRIPTOR 句 変数に代入する場合、その変数がすでに宣言済みであることが必要です。また、変数名は「アット」記号 (@) で始めます。変数の代入とカラムの代入は混在させることができ、任意の数を使用できます。SET リストの代入の左辺にある名前が、更新されたテーブルのカラムと変数名に一致する場合、UPDATE 文はカラムを更新します。
SET 句 set-item で参照されるカラムは、更新対象となるテーブルまたはビューに配置してください。エイリアスや、他のテーブルまたはビューからのカラムは参照できません。更新するテーブルまたはビューにカーソル指定で相関名が与えられている場合は、SET 句に相関名を使用してください。
各 set-item は 1 つの update-table に関連付けられ、カーソルのクエリで一致するテーブルの対応するカラムは修正されます。式は UPDATE リストに指定されているテーブルのカラムを参照します。また、+、-、...、COALESCE、IF などの演算子を使用すると、定数、変数、クエリの選択リストからの式、またはそれらを組み合わせて使用できます。式は、カーソルのクエリから式のエイリアスを参照できません。また、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/2003 コア機能。ansi_update_constraints オプションが Off に設定されている場合、更新可能なカーソルの範囲にはベンダ拡張が含まれます。
Sybase Embedded SQL の使用は Open Client/Open Server でサポートされ、プロシージャとトリガの使用は SQL Anywhere でサポートされます。
次は、UPDATE 文の WHERE CURRENT OF カーソルの例です。
UPDATE Employees SET Surname = 'Jones' WHERE CURRENT OF emp_cursor; |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |