ORACLE (feat. PACKAGE)

min seung moon·2021년 2월 23일
0

Oracle

목록 보기
19/23

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 = '이승기';
profile
아직까지는 코린이!

0개의 댓글