[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;