2009-08-13 17 views
1

私はAS400でDB2を少し新しくしましたが、今日は1つのフィールドの値を300k +レコードの間違った値に設定しました。 。DB2/AS400の結合でクエリを更新

私はUPDATEステートメントを使用して、問題を抱えている:

UPDATE WHSPSLP 
SET WHSPSLP.WHS_TOT_VALUE = BUWHSPSLP.WHS_TOT_VALUE 
WHERE WHSPSLP.WHS_PSLP_NO = BUWHSPSLP.WHS_PSLP_NO 

私はテーブルのバックアップから正しい値を持つフィールドを更新していますが、私はちょうどそれを得ることができません。

おかげ

答えて

1

BUWHSPSLP.WHS_TOT_VALUEが一定値である場合、あなたはこのような1つの更新ステートメントを使用することができ、すべてのレコードのために:エルス

DECLARE v_WHSTotalValue INT; 
SET v_WHSTotalValue = (
    SELECT WHS_TOT_VALUE 
    FROM BUWHSPSLP 
    FETCH FIRST 1 ROWS ONLY 
); 

UPDATE WHSPSLP 
SET WHS_TOT_VALUE = v_WHSTotalValue 
WHERE WHS_PSLP_NO IN (
    SELECT WHS_PSLP_NO 
    FROM BUWHSPSLP 
); 

、あなたが使用してすべてのレコードをループにする必要がありますそれぞれを次のように更新します。

BUWHSPSLPLoop: 
FOR v AS cur1 CURSOR WITH HOLD FOR 
    SELECT WHS_TOT_VALUE, WHS_PSLP_NO 
    FROM BUWHSPSLP 
DO 
    UPDATE WHSPSLPSET 
    SET WHS_TOT_VALUE = v.WHS_TOT_VALUE 
    WHERE WHS_PSLP_NO = v.WHS_PSLP_NO; 
END FOR BUWHSPSLPLoop;