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 文 [SQL Remote]

この文は、データベース内のデータの修正に使用します。

構文 1
UPDATE table-list
SET column-name = expression, ...
[ VERIFY ( column-name, ... ) VALUES ( expression, ... ) ]
[ WHERE search-condition ]
[ ORDER BY expression [ ASC | DESC ], ... ]
構文 2
UPDATE table-name
PUBLICATION publication-name
{ SUBSCRIBE BY subscription-expression |
   OLD SUBSCRIBE BY old-subscription-expression
   NEW SUBSCRIBE BY new-subscription-expression }
WHERE search-condition
expression: value | subquery
パラメータ
  • table-name   table-name は、修正する必要がある、リモート・データベースのテーブルです。

  • publication-name   publication-name は、サブスクリプションを変更する必要のあるパブリケーションです。

  • subscription-expression   subscription-expression の値は、ローの新しい受信者と既存の受信者を決定するため、SQL Remote によって使用されます。subscription-expression は、値またはサブクエリのいずれかです。代わりに、サブスクリプション式 OLD と NEW を両方設定することもできます。

  • WHERE   WHERE 句は、サブスクリプションを作成したデータベース間で移動させるローを指定します。

備考

UPDATE 文を使って、1 つまたは複数のテーブルを修正します。それぞれ指定したカラムを、等号の右側の式の値に設定します。expression には制限がありません。column-name も式の中で使用できます。この場合、古い値を使用します。

WHERE 句を指定しない場合、すべてのローが更新されます。WHERE 句を指定する場合、探索条件を満たすローだけが更新されます。

通常、ローを更新する順序は問題ではありません。ただし、NUMBER(*) 関数と一緒に使って、ある指定された順序でローの中の数字を増加させる場合に、順序付けが役に立ちます。また、テーブルのプライマリ・キー値に 1 を追加するような操作を行う場合は、操作中にプライマリ・キーの重複が起こらないように、プライマリ・キーの降順でその操作を行う必要があります。

ビューを定義する SELECT 文の中に GROUP BY 句や集合関数がないか、または UNION 句を伴わない場合は、ビューを更新できます。

テーブルに挿入した文字列は、テーブルが大文字と小文字を区別するかどうかにかかわらず、常に入力された大文字と小文字がそのまま格納されます。そのため、文字列 Value で更新した文字データ型カラムは、常に大文字の V と残りの文字が小文字でデータベースに格納されます。SELECT 文は、文字列を Value として返します。ただし、データベースで大文字と小文字が区別されない場合は、すべての比較において Value は value、VALUE などと同じと見なされます。さらに、単一カラムのプライマリ・キーにエントリ Value がある場合は、プライマリ・キーがユニークでなくなるので、INSERT 文による value の追加は拒否されます。

オプションの FROM 句で、ジョインに基づいてテーブルを更新できます。FROM 句がある場合、WHERE 句は FROM 句のローが条件を満たしているかどうかを調べます。データの更新は、UPDATE キーワードのすぐ後のテーブル・リストの中だけで行われます。

FROM 句を使用する場合、更新されるテーブル名をその文の両方の部分で同じように修飾することが重要です。一方の場所で相関名が使用されている場合は、もう一方の場所でも同じ相関名を使用します。修飾方法が異なると、エラーが発生します。

構文 1 と構文 2 は SQL Remote のみに適用されます。

構文 2 で OLD SUBSCRIBE BY 式と NEW SUBSCRIBE BY 式を付けない場合は BEFORE トリガで使用する必要があります。

構文 2 で OLD SUBSCRIBE BY 式と NEW SUBSCRIBE BY 式を付ける場合はどこでも使用できます。

構文 1 は、SQL Remote だけのための構文であり、Message Agent によって 1 つのローの更新が実行されます。VERIFY 句には、更新するローの中にあると予想される値のセットを含めます。値が一致しない場合、UPDATE が処理される前に RESOLVE UPDATE トリガが起動されます。VERIFY 句の照合が失敗しても、UPDATE は失敗しません。VERIFY 句を指定すると、テーブルが一度に 1 つずつ更新されます。

構文 2 は、必ず SQL Remote と一緒に使用します。構文 3 に OLD 式も NEW 式も使用しない場合は、関連する値にアクセスできるように、BEFORE トリガ内で使用します。この目的は、リストが変更されるたびに、SUBSCRIBE BY 値の完全なリストを提供することです。これは、SQL Remote トリガに配置され、データベース・サーバが SUBSCRIBE BY 値の現在のリストを計算できるようにします。両方のリストがトランザクション・ログ内に記録されます。

Message Agent は 2 つのリストを使用して、ローが必要な、ローを保有しない任意のリモート・データベースにローが移動したことを確認します。また、Message Agent は、ローを保有し、そのローが不要になったリモート・データベースからローを削除します。そのローを保有し、依然そのローを必要とするリモート・データベースは、UPDATE 文の影響を受けません。

UPDATE 文の構文 2 を使用すると、古い SUBSCRIBE BY リストと新しい SUBSCRIBE BY リストを明示的に指定して、SQL Remote トリガの効率を高めることができます。このリストがないと、データベース・サーバはパブリケーション定義から古い SUBSCRIBE BY リストを計算します。通常は、新しい SUBSCRIBE BY リストは古い SUBSCRIBE BY リストとほんのわずか異なるだけなので、古いリストの処理は 2 回行われます。古いリストと新しいリストの両方を指定すると、この無駄な作業を避けることができます。

OLD SUBSCRIBE BY 構文と NEW SUBSCRIBE BY 構文は、同じ SUBSCRIBE BY 式で同じトリガを使用し、たくさんのテーブルを更新する場合には特に便利です。これにより、パフォーマンスが大幅に向上します。

SUBSCRIBE BY 式は、値またはサブクエリのいずれかです。

UPDATE 文の構文 2 は、特定の SQL Remote 機能を実装するために使用したり、BEFORE トリガ内で使用したりします。

SUBSCRIBE BY 句内のサブクエリを使って作成したパブリケーションについては、UPDATE 文の構文 2 を含むトリガを作成してローがそれぞれの正しいサブスクリプションに格納されていることを確認します。

この機能の詳細については、BEFORE UDPATE トリガの使用を参照してください。

UPDATE 文の構文 2 を使うと、トランザクション・ログ内にエントリが作成されますが、データベース・テーブルは変更されません。

パーミッション

修正対象のカラムに対する UPDATE パーミッションが必要です。

関連する動作

なし

参照
標準と互換性
  • SQL/2003   ベンダ拡張。

従業員 Philip Chin (従業員 129) を販売部からマーケティング部に異動する例を示します。

UPDATE Employees
VERIFY( DepartmentID ) VALUES( 300 )
SET DepartmentID = 400
WHERE EmployeeID = 129;