hye...id、nama、jenis_rumah、sewa フィールドを含む rumah というテーブル名が 1 つあります。nama like %RIZAL% の場合は sewa フィールドを更新し、次に sewa*3 を更新する必要があります。jenis_rumah = コルネット ロットの場合、sewa を 20% 割引で更新します。これは私の pl/sql ですが、更新プロセスが失敗しています...専門家からのアドバイスが必要です。tq。
1回目の試行:
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;
2回目の試行: 別の方法で試してみると、%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;