使用Join in DB2 / AS400更新查询

时间:2009-08-13 22:49:30

标签: db2

我对AS400上的DB2有些新意,今天我设法将单个字段的值设置为300k +记录中的错误数量,现在我需要修复它...

我遇到UPDATE语句问题:

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

我正在从表的备份中使用正确的值更新字段,但我无法正确使用。

谢谢

1 个答案:

答案 0 :(得分:1)

如果BUWHSPSLP.WHS_TOT_VALUE是一个常量值,对于所有记录,您可以使用一个这样的更新语句:

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;