hye ... id, nama, jenis_rumah 및 sewa 필드가 포함 된 1 개의 테이블 이름 rumah가 있습니다. 나는 % MAIL %와 같은 NAM이 다음에 sewa * 3을 업데이트 할 때 sewa 필드를 업데이트해야합니다. jenis_rumah = cornet lot이라면 sewa를 20 % 할인 된 가격으로 업데이트하십시오. 이것은 내 pl/sql이지만 업데이트 프로세스가 실패합니다 ... 전문가의 조언이 필요합니다. tq.동일한 필드 twise를 업데이트하십시오
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 차 시험 : 내가 다른 방법을 시도 %의 리잘 % 등의 단지 이름 선택이 업데이트됩니다
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;
왜이 절차가 필요합니까? – Marc