Package란?
- 오라클 데이터베이스에 저장되어 있는 서로 관련있는 PL/SQL 프로지져와 함수들의 집합
- 사용방법
선언부 (Java에서 Interface라고 생각하면 이해하기 편함!)
create or replace PACKAGE emp_info AS
PROCEDURE all_emp_info;
PROCEDURE all_sal_info;
-- 특정 부서의 사원 정보
PROCEDURE dept_emp_info (v_deptno IN NUMBER);
-- 특정 부서의 급여 정보
PROCEDURE dept_sal_info (v_deptno IN NUMBER);
END emp_info;
구현부 (Java에서 Implement 라고 이해합시당)
create or replace PACKAGE BODY emp_info AS
-----------------------------------------------------------------
-- 모든 사원의 사원 정보
-----------------------------------------------------------------
PROCEDURE all_emp_info
IS
CURSOR emp_cursor IS
SELECT empno, ename, to_char(hiredate, 'YYYY/MM/DD') hiredate
FROM emp
ORDER BY hiredate;
BEGIN
DBMS_OUTPUT.ENABLE;
FOR aa IN emp_cursor LOOP
DBMS_OUTPUT.PUT_LINE('사번 : ' || aa.empno);
DBMS_OUTPUT.PUT_LINE('성명 : ' || aa.ename);
DBMS_OUTPUT.PUT_LINE('입사일 : ' || aa.hiredate);
END LOOP;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM || '에러 발생');
END all_emp_info;
-----------------------------------------------------------------
-- 모든 사원의 급여 정보
-----------------------------------------------------------------
PROCEDURE all_sal_info
IS
CURSOR emp_sal_cursor IS
SELECT AVG(sal) avg_sal, MAX(sal) max_sal, MIN(sal) min_sal
FROM emp;
BEGIN
DBMS_OUTPUT.ENABLE;
FOR aa IN emp_sal_cursor LOOP
DBMS_OUTPUT.PUT_LINE('전체급여 평균 : ' || aa.avg_sal);
DBMS_OUTPUT.PUT_LINE('최대급여금액 : ' || aa.max_sal);
DBMS_OUTPUT.PUT_LINE('최소급여금액 : ' || aa.min_sal);
END LOOP;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM||'에러 발생 ');
END all_sal_info;
-----------------------------------------------------------------
-- 특정 부서의 사원 정보
-----------------------------------------------------------------
PROCEDURE dept_emp_info (v_deptno IN NUMBER)
IS
CURSOR emp_info IS
SELECT empno, ename, to_char(hiredate, 'YYYY/MM/DD') hiredate
FROM emp
WHERE deptno = v_deptno;
BEGIN
DBMS_OUTPUT.ENABLE;
FOR aa IN emp_info LOOP
DBMS_OUTPUT.PUT_LINE('사번 : ' || aa.empno);
DBMS_OUTPUT.PUT_LINE('성명 : ' || aa.ename);
DBMS_OUTPUT.PUT_LINE('입사일 : ' || aa.hiredate);
END LOOP;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM || '에러 발생');
END dept_emp_info;
-----------------------------------------------------------------
-- 특정 부서의 급여 정보
-----------------------------------------------------------------
PROCEDURE dept_sal_info (v_deptno IN NUMBER)
IS
CURSOR emp_info IS
SELECT ROUND(AVG(sal),3) avg_sal, MAX(sal) max_sal, MIN(sal) min_sal
FROM emp;
BEGIN
DBMS_OUTPUT.ENABLE;
FOR aa IN emp_info LOOP
DBMS_OUTPUT.PUT_LINE('전체 급여 평균 : ' || aa.avg_sal);
DBMS_OUTPUT.PUT_LINE('최대 급여 금액 : ' || aa.max_sal);
DBMS_OUTPUT.PUT_LINE('최소 급여 금액 : ' || aa.min_sal);
END LOOP;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM || '에러 발생');
END dept_sal_info;
END emp_info;
'Database' 카테고리의 다른 글
[PL/SQL] 트리거 (Trigger) (0) | 2019.09.16 |
---|---|
[PL/SQL] 커서 (CURSOR) (0) | 2019.09.16 |
[PL/SQL] 기본 문법 - %TYPE, %ROWTYPE Attribute, Exception 처리 (0) | 2019.09.16 |
[PL/SQL] Function, Procedure (0) | 2019.09.11 |
[Oracle] 조건 검색 - WHERE 절 (0) | 2019.09.10 |