データを更新する際の値の選択

表の行を更新する際に、これらの行から更新された値を同時に選択できます。

プロシージャー

更新中の行から値を選択するには、

SELECT ステートメントの FROM 節でUPDATEステートメントを指定してください。
表から 1 つ以上の行を更新するときに、次のデータを取り出すことができます。
  • ROWID または ID 列などの、自動的に生成された列の値
  • 列に対するデフォルト値のいずれか
  • 更新された行のすべての値 (個々の列名を指定せずに)
ほとんどの場合、SELECT FROM UPDATE ステートメントに FINAL TABLE 文節を使用します。 FINAL TABLE は、更新が行われた後の表またはビューの行で構成されます。

例: SELECT FROM FINAL TABLE
会社あらゆる従業者が、5%の昇給を受けているとします。 次の SELECT FROM UPDATE ステートメントを使用して、設計担当者の給与をそれぞれ 5 パーセント増やし、同社の給与の合計増加額を取り出すことができます。
SELECT SUM(SALARY) INTO :salary FROM FINAL TABLE
  (UPDATE EMP SET SALARY = SALARY * 1.05
   WHERE JOB = 'DESIGNER');
例: 更新データから行単位でデータの取得
更新されたデータの出力を行ごとに取り出すには、SELECT FROM UPDATE ステートメントにカーソルを使用します。 たとえば、会社のすべての設計者がボーナスを30%増やしているとします。 次の SELECT FROM UPDATE ステートメントを使用して、事務員のボーナスをそれぞれ 30 パーセント増やし、各事務員のボーナスを取り出すことができます。
DECLARE CS1 CURSOR FOR
  SELECT LASTNAME, BONUS FROM FINAL TABLE
   (UPDATE EMP SET BONUS = BONUS * 1.3
    WHERE JOB = 'CLERK');
FETCH CS1 INTO :lastname, :bonus;
例:結果表に新しい列を含めますが、ターゲット表には含めません。
INCLUDE 文節を使用して、結果表に新規列を導入できますが、ターゲット表に列を追加することはできません。 たとえば、営業担当者がコミッションを20%増やしたとします。 EMP 表の営業担当員 (SALESREP) の歩合 (COMM) を更新し、従来の歩合と新しい歩合をそれぞれの営業担当員ごとに取り出す必要があります。 次の SELECT FROM UPDATE ステートメントを使用して更新を実行し、必要なデータを取り出すことができます。
DECLARE CS2 CURSOR FOR
SELECT LASTNAME, COMM, old_comm FROM FINAL TABLE
  (UPDATE EMP INCLUDE(old_comm DECIMAL (7,2))
   SET COMM = COMM * 1.2, old_comm = COMM
   WHERE JOB = 'SALESREP');