[Oracle] 39.패키지
패키지
패키지의 사전적인 의미는 꾸러미입니다.
관련 있는 프로시저를 보다 효율적으로 관리하기 위해서 패키지 단위로 배포할 때 유용하게 사용됩니다.
패키지는 패키지 선언(명세부)과 패키지 몸체 선언(몸체부) 두 가지 모두를 정의해야 하고,
패키지 안에는 다양한 프로시져와 함수를 포함하고 있습니다!
다음은 패키지를 사용함으로써 얻는 장점입니다!
- 하나의 객체에서 모든 연관된 코드를 관리
- 하나의 객체가 모음집 역할
- 객체를 GRANT/REVOKE의 권한으로 쉽게 관리
- 유지보수의 편의성
패키지의 구성
--패키지 선언부
CREATE [ OR REPLACE ] PACKAGE package_name
IS
--변수선언및 커서 선언
--프로시져 또는 함수 선언
PROCEDURE procedure_name1;
PROCEDURE procedure_name2;
END;
/
--패키지 몸체부
CREATE [ OR REPLACE ] PACKAGE BODY package_name
IS
--선언된 프로시져및 함수를 등록
PROCEDURE procedure_name1
IS
....
END;
END;
/
몸체부내에는 여러 가지의 프로시저나 함수를 정의하고 있고,
명세부에는 몸체부에 정의한 함수들을 선언해 놓습니다~!
패키지 내의 정의된 프로시저나 함수를 호출하는 방식은 다음과 같습니다.
EXECUTE 패키지명.프로시저명
패키지에 대해 예를 들자면 PL / SQL문에서 사용했던 문자열을 화면에 출력하는 다음 프로시저 기억하시나요??
dbms_output.put_line('')
이 프로시저는 사실 dbm_output이라는 패키지 안에 정의된 프로시저입니다!
프로시저 명은 put_line 이죠!
패키지 작성
--패키지 선언부
CREATE OR REPLACE PACKAGE package_ex
IS
grade VARCHAR2(10);
PROCEDURE p_emp_del_eid(p_eid emp.employee_id%TYPE);
FUNCTION f_emp_sal_grade(vsal IN emp.salary%TYPE) return VARCHAR2;
END;
/
--패키지 몸체부
CREATE OR REPLACE PACKAGE BODY package_ex
IS
-- 프로시저 구현
PROCEDURE p_emp_del_eid (p_eid emp.employee_id%TYPE)
IS
BEGIN
DELETE FROM emp
WHERE
employee_id = p_eid;
dbms_output.put_line(p_eid || '번 사원이 삭제되었습니다');
END;
-- 함수 구현
FUNCTION f_emp_sal_grade (vsal IN emp.salary%TYPE)
RETURN VARCHAR2
IS
BEGIN
IF ( vsal <= 3000 ) THEN
grade := 'LOW';
ELSIF ( vsal <= 5000 ) THEN
grade := 'MIDDLE';
ELSIF ( vsal <= 8000 ) THEN
grade := 'HIGH';
ELSE
grade := 'MAX';
END IF;
return(grade);
END;
END;
/
--패키지 함수 호출
SELECT package_ex.f_emp_sal_grade(1000)
FROM dual;
패키지 재컴파일과 삭제
패키지를 재컴파일을 하고 싶으면 다음과 같이합니다!
ALTER PACKAGE package_ex COMPLIE;
패키지를 삭제하려면 역시 DROP 문을 이용합니다!
DROP PACKAGE package_ex;
DROP PACKAGE BODY package_ex;