2009-08-13 4 views
1

Je suis un peu nouveau à DB2 sur un AS400, aujourd'hui j'ai réussi à définir la valeur d'un seul champ à la mauvaise quantité dans les enregistrements 300k +, et maintenant je dois y remédier .. .Mise à jour requête avec Join dans DB2/AS400

Je vais avoir un problème avec l'instruction UPDATE:

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

Je met à jour le champ avec la valeur correcte à partir d'une sauvegarde de la table, mais je ne peux pas l'obtenir droit .

Merci

Répondre

1

Si BUWHSPSLP.WHS_TOT_VALUE est une valeur constante, pour tous les enregistrements que vous pouvez utiliser une instruction de mise à jour comme celui-ci:

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 
); 

Sinon, vous devrez faire une boucle à travers tous les enregistrements à l'aide un curseur et mettre à jour chacun d'eux comme suit:

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;