Plsql 将同一字段更新两次
hye…我有一个表名rumah,其中包含id、nama、jenis_rumah和sewa字段。当nama像%RIZAL%时,我需要更新sewa字段,然后更新sewa*3。如果jenis_rumah=短号批次,则以20%折扣更新sewa。这是我的pl/sql,但是更新过程失败了…需要专家的建议。tq 第一次审判:Plsql 将同一字段更新两次,plsql,Plsql,hye…我有一个表名rumah,其中包含id、nama、jenis_rumah和sewa字段。当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); j
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%这样的nama被更新
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;
您不需要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
;
你不需要一个程序。只需运行2条update语句
UPDATE rumah
SET sewa = sewa*3
where upper (nama) like '%RIZAL%';
UPDATE rumah
SET sewa = (sewa * 80/100)
where jenis_rumah = 'CORNER LOT';
为什么需要这样的过程?谢谢,但存在数据类型不一致的错误:预期数量已达到CHAR@user1407005sewa的数据类型是什么?谢谢,但我不想手动运行它,这就是为什么我需要放入过程中的原因。你认为呢???@user1407005,你也可以在程序中添加更新。但塞伯内特的解决方案可能更优雅一些。