2012-05-21 4 views
-1

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; 
+0

왜이 절차가 필요합니까? – Marc

답변

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 
     ; 
+0

감사하지만 오류가 일치하지 않는 데이터 유형이 있습니다. expected NUMBER got CHAR – user1407005

+0

@ user1407005 sewa의 데이터 유형은 무엇입니까? – Chandu

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'; 
+0

고마워,하지만 수동으로 실행하고 싶지 않아, 왜 내가 프로 시저에 넣어야하는지. 어떻게 생각해?? – user1407005

+0

@ user1407005, 프로 시저에 업데이트를 추가 할 수도 있습니다. 그러나 Cybernate의 솔루션은 아마도 좀 더 우아 할 것입니다. – Marc

관련 문제