본문 바로가기
SQL/Oracle

오라클 패키지(Package) 생성부터 실행까지

by wakestand 2020. 2. 3.
반응형

오라클에서 패키지(Package)는

프로시저(Procedure)와 함수(Function) 집합이라고 보면 되는데

한 패키지 안에 프로시저와 함수를 넣어놓고

필요할 때 패키지 내에 있는 프로시저와 함수를 뽑아 사용하는 식이다

 

먼저 프로시저와 함수 개념과 사용법을 모른다면 아래 글을 읽고 올 것을 권장한다

 

오라클 프로시저 작성부터 실행, 조회까지

오라클에서 프로시저(Procedure)란 특정 구문을 반복해서 사용할 때 사용하는 PL/SQL BLOCK이다 프로시저는 함수(Function)과는 다르게 Return 값을 반드시 반환하지 않아도 된다 프로시저의 장점으로는 데이터베..

wakestand.tistory.com

 

오라클 function 문법부터 실행, 조회까지

오라클(Oracle)에서 function이란 호출 시 function 내에 작성한 내용을 수행해서 결과를 반환하는데 사용한다 대표적인 활용 예제는 특정 컬럼 조회 시 복잡한 공식을 사용해야 하는 경우 조회할 때마다 공식을..

wakestand.tistory.com

패키지는 선언(Declaration) 부분과 바디 부분으로 나누어져 있는데

선언 부분에서는 패키지 안에 넣을 프로시저, 함수와 파라미터, 리턴 값을 정의하고

 

바디 부분에서는 실제 프로시저, 함수 호출 시 수행할 내용을 정의한다

 

이렇게 패키지를 작성한 후에

쿼리에서 패키지에 작성한 프로시저, 함수를 호출하려면

패키지명.프로시저명, 함수명; 처럼 호출하는데

예제를 보면 아래와 같이 호출해주면 된다

 

이제 정리를 해 보자면 패키지는 프로시저와 함수를 모아놓은 것이고

패키지 생성 시에는 선언, 바디 부분으로 나뉘며

선언 부분에서는 프로시저와, 함수명, 파라미터, 리턴 값을 작성하며

바디 부분에서는 프로시저, 함수 호출 시 수행할 내용을 작성한다

이후 패키지 작성 후에 패키지 안의 프로시저와 함수를 호출하려면

패키지명.프로시저, 함수명;

이런 식으로 호출한다

 

마지막으로 예제에 사용한 코드는 아래와 같다

 

-- 패키지 선언부분
CREATE OR REPLACE PACKAGE SCOTT.PACKAGE_TEST
AS
	-- 패키지에 들어올 프로시저, 함수 정의
	PROCEDURE PROC_TEST;

	PROCEDURE PROC_TEST2(NAME IN VARCHAR2, AGE IN NUMBER);

	FUNCTION examFunc(getGender IN VARCHAR2) RETURN VARCHAR2;

END PACKAGE_TEST;

 

-- 패키지 바디 부분
CREATE OR REPLACE PACKAGE BODY SCOTT.PACKAGE_TEST
AS
	 -- 패키지 내 프로시저, 함수 내용 정의
     PROCEDURE PROC_TEST
	 IS
	 BEGIN
	 	 INSERT INTO TABLE_TEST(COL1,COL2) VALUES('TEST', 1);
     END PROC_TEST;
    
     PROCEDURE PROC_TEST2(NAME IN VARCHAR2, AGE IN NUMBER)
	 IS
	 BEGIN
	 	 INSERT INTO TABLE_TEST(COL1,COL2) VALUES(NAME, AGE);
     END PROC_TEST2;  
    
	 FUNCTION examFunc -- 함수명
	 (getGender IN VARCHAR2) -- 함수 호출시 받아올 파라미터 정의
	 RETURN VARCHAR2 -- 함수 수행 시 반환할 데이터 타입
	 IS -- 사용할 변수 정의
	 	setGender VARCHAR2(100);
	 BEGIN -- 변수를 가지고 함수 수행
	     IF getGender = '남' THEN setGender := '남자';
	     ELSIF getGender = '여' THEN setGender := '여자';
	     ELSE setGender := '오류'; 
	     END IF;
	 RETURN setGender; -- 반환
	 END examFunc;    
    
END PACKAGE_TEST;

 

-- 패키지 호출 부분
-- 패키지 내의 프로시저, 함수 사용할 경우
BEGIN
	PACKAGE_TEST.PROC_TEST;
END;

BEGIN
	PACKAGE_TEST.PROC_TEST2('홍길동', 50);
END;

SELECT PACKAGE_TEST.examFunc('남') FROM DUAL
반응형

댓글