Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL リファレンス » SQL の使用 » SQL 文 » SQL 文 (P ~ Z)

 

UPDATE (位置付け) 文 [ESQL] [SP]

この文は、カーソルの現在の位置でデータを修正するために使用します。

構文 1
UPDATE WHERE CURRENT OF cursor-name
{ USING DESCRIPTOR sqlda-name | FROM hostvar-list }
構文 2
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-listhostvar 形式を使用できるのは、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;