hr_pkg의 fn_get_dep_name 함수의 본문이 없더라도 선언부에 있으니 오류 없이 성공적으로 컴파일되었다. 물론 ch12_dep_proc를 실행하면 실행 시점에는 오류가 날 테지만, 나중에 구현부가 완성된 뒤에 이 프로시저를 다시 컴파일할 필요는 없다. 이제 fn_get_dep_name 함수의 본문을 작성해 보자.

    입력

        CREATE OR REPLACE PACKAGE BODY hr_pkg IS
    
        ...
        ...
          -- 사번을 입력받아 부서명을 반환하는 함수
          FUNCTION fn_get_emp_name ( pn_employee_id IN NUMBER )
            RETURN VARCHAR2
          IS
            vs_emp_name employees.emp_name%TYPE;
          BEGIN
            -- 부서 테이블과 조인해 사번을 이용, 부서명까지 가져온다.
            SELECT b.department_name
              INTO vs_dep_name
              FROM employees a, departments b
             WHERE a.employee_id = pn_employee_id
               AND a.department_id = b.department_id;
    
            -- 부서명 반환
            RETURN vs_dep_name;
    
          END fn_get_dep_name;
    
        END  hr_pkg;
    

    결과

        PROCEDURE HR_PKG이(가) 컴파일되었습니다.
    

    이제 ch12_dep_proc 프로시저를 실행해 보자.

    입력

        EXEC ch12_dep_proc(177);
    

    결과

        영업부
    

    177번 사원의 부서명은 영업부이고, 패키지 본문이 추가됐지만 해당 패키지를 호출하는 프로시저를 다시 컴파일할 필요가 없음을 알 수 있다.

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