더북(TheBook)

이제 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 패키지로 디버깅하는 방법을 알아 보자.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.