两次更新相同的字段

时间:2012-05-21 03:38:05

标签: plsql

hye ...我有一个包含id,nama,jenis_rumah和sewa字段的表名rumah。当nama喜欢%RIZAL%时,我需要更新sewa字段,然后更新sewa * 3。如果jenis_rumah =短号很多,那么以20%的折扣更新sewa。这是我的pl / sql,但更新过程失败...需要专家的建议。 TQ

第一次试验:

DECLARE CURSOR rec IS

SELECT id, nama, jenis_rumah, sewa
FROM rumah;

nama varchar2 (100);
jenis_rumah varchar2(100);
upd_cntr  NUMBER := 0;
tot_all      NUMBER :=0;

    BEGIN
    FOR z1 IN rec LOOP 

            if upper (nama) like '%RIZAL%' then 
                begin
                UPDATE rumah
                SET sewa = sewa*3
                where id = z1.id ;
                 end;

               elsif  jenis_rumah = 'CORNER LOT' THEN
               Begin
              UPDATE rumah
              SET sewa = (sewa * 80/100)
              where id = z1.id;
              end;

              END IF;      


            upd_cntr := upd_cntr + 1;
            tot_all := tot_all + 1;

        END LOOP; 

            DBMS_OUTPUT.PUT_LINE('Total Updated Sewa:' || tot_all);     
    END;

第二次试用: 我尝试了不同的方式,只有%RIZAL%更新

DECLARE CURSOR rec IS

SELECT id, nama, jenis_rumah, SUM (sewa*3) AS upd_sewa
FROM rumah
WHERE UPPER (nama) LIKE '%RIZAL%'
GROUP BY id, nama, jenis_rumah, sewa;

jenis_rumah varchar2(100);
upd_cntr  NUMBER := 0;
tot_all      NUMBER :=0;

    BEGIN
    FOR z1 IN rec LOOP 

            UPDATE rumah
            SET sewa = z1.upd_sewa
            where id = z1.id ;

         IF  jenis_rumah = 'CORNER LOT' THEN
          UPDATE rumah
          SET sewa = (sewa * 80/100);
            END IF;      


            upd_cntr := upd_cntr + 1;
            tot_all := tot_all + 1;


        END LOOP; 

            DBMS_OUTPUT.PUT_LINE('Total Updated Sewa:' || tot_all);

    END;

2 个答案:

答案 0 :(得分:4)

您不需要PL / SQL来实现您的目标。

请改为尝试:

 UPDATE rumah
        SET sewa = 
                CASE 
                    WHEN UPPER(nama) LIKE '%RIZAL%' THEN  sewa*3
                    WHEN jenis_rumah = 'CORNER LOT' THEN (sewa * 80/100)
                    ELSE sewa
                END
        ;

答案 1 :(得分:0)

您不需要手术。只需运行2个更新语句。

UPDATE rumah
   SET sewa = sewa*3
 where upper (nama) like '%RIZAL%';


UPDATE rumah
   SET sewa = (sewa * 80/100)
 where jenis_rumah = 'CORNER LOT';