PACKAGE
SELECT * FROM ALL_OBJECT WHERE OBJECT_TYPE = 'PACKAGE';
SELECT * FROM ALL_PROCEDURE WHERE OBJECT_NAME = 'DBMS_OUPUT';
1. Package 생성
- 사용자가 직접 패키지를 생성할 수 있음
- 특히 큰 규모의 데이터베이스 프로젝트를 진행할 때는, 관련된 스토어드 프로시저나 함수를 별도의 패키지로 묶어주는 것이 관리하는데 효율적일 것임
-- 패키지 선언 형식
CREATE OR REPLACE PACKAGE 패키지이름 AS
변수 선언 부분
커서 선언 부분
예외 선언 부분
스토어드 프로시저 선언 부분
함수 선언 부분
END 패키지 이름;
-- 패키지 본문 선언 형식(2)
CREATE OR REPLACE PACKAGE BODY 패키지이름 AS
변수 구현 부분
커서 구현 부분
예외 구현 부분
스토어드 프로시저 구현 부분
함수 구현 부분
END 패키지 이름;
-- 패키지 호출 형식
EXECUTE 패키지이름.WJWKDVMFHTLWJDLFMA();
2. Package 실습
-- 패키지 선언
CREATE OR REPLACE PACKAGE totalPackage AS
v_age NUMBER;
v_bYear NUMBER;
PROCEDURE sampleProc(pi_userName IN NCHAR);
FUNCTION sampleFunc(bYear NCHAR) RETURN NUMBER;
END totalPackage;
-- 패키지 본문
CREATE OR REPLACE PACKAGE BODY totalPackage AS
PROCEDURE sampleProc(pi_userName IN NCHAR) AS
BEGIN
SELECT birtYEAR INTO v_bYear FROM userTBL
WHERE userName = pi_userName;
DBMS_OUTPUT.PUT_LINE('나이 -->'||sampleFunc(v_bYear));
END sampleProc;
FUNCTION sampleFunc(bYear NCHAR)
RETURN NUMBER AS
BEGIN
v_age := EXTRACT(YEAR FROM SYSDATE) - bYear;
RETURN v_age;
END sampleFunc;
END totalPackage;
-- 패키지 호출
EXECUTE totalPackage.sampleProc('이승기');
SELECT totalPackage.sampleFunc(birtYear) FROM userTBL
WHERE userName = '이승기';