이제 CH17_SALES_DETAIL 테이블을 조작하는 프로시저를 CH17_SRC_TEST_PKG에 추가해 보자.
입력
CREATE OR REPLACE PACKAGE ch17_src_test_pkg IS
pv_name VARCHAR2(30) := 'ch17_SRC_TEST_PKG';
PROCEDURE sales_detail_prc ( ps_month IN VARCHAR2,
pn_amt IN NUMBER,
pn_rate IN NUMBER
);
END ch17_src_test_pkg;
결과
PACKAGE CH17_SRC_TEST_PKG이(가) 컴파일되었습니다.
입력
CREATE OR REPLACE PACKAGE BODY ch17_src_test_pkg IS
PROCEDURE sales_detail_prc ( ps_month IN VARCHAR2,
pn_amt IN NUMBER,
pn_rate IN NUMBER )
IS
BEGIN
--1. p_month에 해당하는 월의 CH17_SALES_DETAIL 데이터 삭제
DELETE ch17_SALES_DETAIL
WHERE sales_month = ps_month;
--2. p_month에 해당하는 월의 CH17_SALES_DETAIL 데이터 생성
INSERT INTO ch17_SALES_DETAIL
SELECT b.prod_name,
d.channel_desc,
c.cust_name,
e.emp_name,
a.sales_date,
a.sales_month,
sum(a.quantity_sold),
sum(a.amount_sold)
FROM sales a,
products b,
customers c,
channels d,
employees e
WHERE a.sales_month = ps_month
AND a.prod_id = b.prod_id
AND a.cust_id = c.cust_id
AND a.channel_id = d.channel_id
AND a.employee_id = e.employee_id
GROUP BY b.prod_name,
d.channel_desc,
c.cust_name,
e.emp_name,
a.sales_date,
a.sales_month;
-- 3. 판매금액(sales_amt)이 pn_amt보다 큰 건은 pn_rate 비율만큼 할인
UPDATE ch17_SALES_DETAIL
SET sales_amt = sales_amt - ( sales_amt * pn_rate * 0.01)
WHERE sales_month = ps_month
AND sales_amt > pn_amt;
COMMIT;
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
ROLLBACK;
END sales_detail_prc;
END ch17_src_test_pkg;
결과
PACKAGE BODY CH17_SRC_TEST_PKG이(가) 컴파일되었습니다.
이제 준비 작업이 끝났으니 CH17_SRC_TEST_PKG 패키지로 디버깅하는 방법을 알아 보자.