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

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