[Oracle] 오라클 패키지 사용법 & 예제 (PL/SQL) [코딩팩토리]
Oracle PL/SQL 강좌 by 김정식[꿈꾸는 개발자, DBA 커뮤니티 구루비]
Package는 Variable, Constants, Sub Programm(Procedure, Function)의 집합체로,
PL/SQL에서 사용하는 Procedure, Function를 한 Package로 정의하여,
필요할 때 마다 Package안에 있는 Procedure, Function를 호출할 수 있게 해주는 집합체이다.
다른 Programming 언어에서 흔히 사용하는 Package와 동일하다고 생각하면 된다.
Package는 여러 내부요소들을,
Variable, Constants, Sub Programm(Procedure, Function)
모아 하나의 DBMS Object 단위로 사용할 수 있게 해주며,
Compile 과정을 거쳐 DB에 저장되어,
다른 Programm이나 내부 Query에서 Package의 항목을 참조하여 실행할 수 있다.
Package의 개념이 나오게 된건,
System이 거대해질 수록 사용하는 Procedure나 Function들이,
기하급수적으로 늘어나게 되어 관리가 까다로워지게 된다.
늘어난 여러 항목들을 비슷한 유형을 묶어 손 쉽게 관리하게 위해 등장했다.
Package는 아래와 같이 선언(SPEC), 본문(BODY) 형식을 지닌다.
// 선언(SPEC)
// 해당 Pacakge에서 사용할 항목들
// 변수, 커서, 예외 처리, Procedure, Function을 선언
// []는 생략 가능
// | 는 OR
CREATE [OR REPLACE] PACKAGE package_name 
IS | AS
    [ 변수 선언 절 ]
    [ 커서 선언 절 ]
    [ 예외 선언 절 ]
    [ Procedure, Function 선언 절 ]
END package_name;
// 본문(BODY)
// BODY 키워드로 해당 Package의 Procedure, Function의 수행 내용 부분을 정의
CREATE [OR REPLACE] PACKAGE BODY package_name 
IS | AS
    [ Procedure, Function 수행 절 ]
END package_name;
IS | AS 는 Procedure, Package에서는 동의어로 동작
Table, View, Cursor에서는 다른 의미
AS는 독립 실행형(Block, 하위 프로그램, Package 외부) Entity 용으로 사용
IS는 임베디드(Block, 서브 프로그램, Package 내부) Entity 용으로 사용
선언 절에서는 해당 Package에 포함될,
PL/SQL Procedure, Function, Cursor, Variable, Exception Hanlder 부분을 선언한다.
Package 선언 절에서 선언한 모든 항목들은 해당 Package 전역으로 사용할 수 있다.
Package 본문, 수행 절에서는 Procedure, Function 호출 시 수행할 내용을 작성한다.
BODY 키워드 추가
아래는 Package 예제 코드이다.
CREATE OR REPLACE PACKAGE pack_gillog
IS
	
    FUNCTION func_gillog(P_MSG IN VARCHAR2)
    RETURN NULL;
    
    PROCEDURE proc_gillog;
    
END pack_gillog;
CREATE OR REPLACE PACKAGE BODY pack_gillog
IS
    FUNCTION func_gillog(P_MSG IN VARCHAR2)
    RETURN NULL
    IS
    BEGIN
    	 DBMS_OUTPUT.PUT_LINE(' FUNC MSG : ' || P_MSG);
         RETURN NULL;
    END func_gillog;
    
    PROCEDURE proc_gillog
    IS
    BEGIN
        DBMS_OUTPUT.PUT_LINE(' PROC EXE ');
    END proc_gillog;
    
END pack_gillog;
Package와 내부 요소들의 호출은 package명.항목명 형식으로 호출 가능하다.
// DBMS_OUTPUT.PUT_LINE 출력 설정
SET SERVEROUTPUT ON;
// 패키지.함수 호출
EXEC pack_gillog.func_gillog('package test message');
// 패키지.프로시져 호출
EXEC pack_gillog.proc_gillog;