*commit이 된 것은 rollback 할 수 없다. 그래서 기존 테이블 외에 백업 테이블을 만들어 둔다.
*procedure 만들기
pyong_info 의 평형별 금액을 기준으로 각호의 가격을 산정하는 프로시져 작성.
1. 층이 전체 층의 60%이상 85% 이하인 층들의 가격을 20%상승
2. 향이 남향이면 10%상승, 동향이면 5%상승, 북향 -5%, 서향 0% 상승.
3. 파라메터로 apt_code 를 입력받아 해당 아파트만 업데이트 될수 있도록...
4. apt_code 별로 업데이트 하지말고, dong_code 별로 업데이트.
CREATE OR REPLACE PROCEDURE SCOTT.chap09 (
l_apt_code number
)
IS
v_max_floor number(11) default 0;
v_price number(11) default 0;
BEGIN
FOR v_list IN (
SELECT h.apt_code, h.dong_code, h.ho_code, h.floor, h.direction, p.pyong_code, p.pyong_price
FROM ho_info h, pyong_info p
WHERE p.pyong_code = h.pyong
AND h.apt_code = l_apt_code
) LOOP
SELECT d.ho_count
INTO v_max_floor
FROM dong_info d
WHERE d.apt_code = v_list.apt_code
AND d.dong_code = v_list.dong_code;
IF v_list.floor >= v_max_floor * 0.6 AND v_list.floor <= v_max_floor * 0.85 THEN
v_price := v_list.pyong_price * 1.2;
ELSE
v_price := v_list.pyong_price;
END IF;
IF v_list.direction = 1 THEN
v_price := v_price * 1.05;
ELSIF v_list.direction = 2 THEN
v_price := v_price;
ELSIF v_list.direction = 3 THEN
v_price := v_price * 1.1;
ELSIF v_list.direction = 4 THEN
v_price := v_price - (v_price * 0.05);
END IF;
UPDATE ho_info h
SET h.price = v_price
WHERE h.apt_code = v_list.apt_code
AND h.dong_code = v_list.dong_code
AND h.ho_code = v_list.ho_code;
END LOOP;
END chap09;
/
*dong_code 에 상관없이 가격변동
CREATE OR REPLACE PROCEDURE SCOTT.chap09 (
l_apt_code number
)
IS
BEGIN
UPDATE ho_info h set price = (
SELECT pi.pyong_price+(pi.pyong_price*0.2)
FROM pyong_info pi
WHERE h.apt_code = l_apt_code AND pi.pyong_code = h.pyong
) WHERE (
h.floor >= (select max(floor)*0.6 from ho_info where h.apt_code = l_apt_code)
AND
h.floor <= (select max(floor)-(max(floor) * 0.15) from ho_info where h.apt_code = l_apt_code)
)
END chap09;
/
'Study > Oracle' 카테고리의 다른 글
[oracle] 접속 (0) | 2019.05.14 |
---|---|
[oracle] CASE-WHEN (0) | 2019.05.14 |
[oracle] FUNCTION, TRIGGER(미완성), UPDATE, TRUNC, GROUP BY (0) | 2019.05.14 |
[oracle] 비만도 계산 create, insert, update, case when (0) | 2019.05.13 |
[oracle] create, alter, update (0) | 2019.05.13 |