1

DB2 データベース内の一部のデータをスクラブする VB アプリを作成しています。いくつかのテーブルで、列全体を更新したいと考えています。たとえば、口座番号の列です。すべての口座番号を 1 から開始し、リストの下に行くにつれて増加するように変更しています。古いアカウント番号と新しいアカウント番号の両方を返すことができるようにして、元の値を失わないように参照できる何らかのレポートを生成できるようにしたいと考えています。列を次のように更新しています:

DECLARE @accntnum INT 
SET @accntnum = 0 
UPDATE accounts
SET @accntnum = accntnum = @accntnum + 1
GO 

元の accntnum と新しいものを 1 つのテーブルに返す方法はありますか?

4

3 に答える 3

3

DB2 には、「データ変更ステートメント」からデータを選択できる非常に便利な機能があります。これは DB2 for Linux/Unix/Windows でテストされましたが、少なくともDB2 for z/OSでも動作するはずです。

番号付けについては、シーケンスの作成も検討できます。次に、更新は次のようになります。

 CREATE SEQUENCE acct_seq
     START WITH 1
     INCREMENT BY 1
     NO MAXVALUE
     NO CYCLE
     CACHE 24
;

SELECT accntnum  AS new_acct, old_acct
FROM FINAL TABLE (
    UPDATE accounts INCLUDE(old_acct INT)
    SET accntnum = NEXT VALUE FOR acct_seq, old_acct = accntnum
)
ORDER BY old_acct;

パーツは、指定された名前とデータ型を使用して、結果のテーブルに新しい列を作成します。INCLUDE次に、他のフィールドと同様に、更新ステートメントで値を設定できます。

于 2013-08-15T22:18:36.220 に答える
0

これが私がすることです:

-- create a new table to track the changes.
    - with columns identifying a unique key, old-vale, new-value, timestamp

-- create a trigger on the accounts table 
   to write the old and new values to the new table.

しかし、すべての条件を知っているわけではないので、苦労する価値はないかもしれません。

于 2013-08-15T18:24:27.497 に答える