개발자 미니민의 개발스터디

[Oracle] 오라클 - 패키지(Package)

by mini_min
[Oracle]
오라클 - 패키지(Package)

 


✔️ 패키지란?

-- 서로 관련된 함수 등을 묶음하는 것을 패키지라고 한다.

-- 선언부와 본문으로 나뉜다.

-- 프로시저, 함수는 오버로딩(중복 정의) 가능하다.

 

⭐ 오버로딩 : 매개변수 타입, 개수가 다르면 동일한 이름으로 프로시저나 함수를 여러 개 정의할 수 있는데, 이를 오버로딩이라고 한다. 

⭐ 패키지는 2번 작업한다. (선언/몸체)

 

-- 실행

EXEC 피키지명.프로시저명(인수)

 

 

-- 패키지 선언

CREATE OR REPLACE PACKAGE pEmp IS 
		FUNCTION fnTax(p IN NUMBER) RETURN NUMBER;
		PROCEDURE empList(pName VARCHAR2);
		PROCEDURE empList; 	-- 중복 정의. 패키지안에서만 가능. 인수가 없으면 () 있으면 안됨

	END pEmp;

 

 

-- 패키지 몸체 구현

CREATE OR REPLACE PACKAGE BODY pEmp IS 
		FUNCTION fnTax(p IN NUMBER)
		RETURN NUMBER
		IS
			t NUMBER := 0;
		BEGIN
			IF p >= 3000000 THEN t := TRUNC(p * 0.03);
			ELSIF p >= 2000000 THEN t := TRUNC(p * 0.02);
			ELSE t := 0;
			END IF;
		RETURN t;
			
		END;

		PROCEDURE empList(pName VARCHAR2)
		IS
			vName VARCHAR2(30);
			vSal NUMBER;
			CURSOR cur_emp IS
				SELECT name, sal FROM emp WHERE INSTR(name, pName) >= 1;
		BEGIN
			OPEN cur_emp;
			LOOP
				FETCH cur_emp INTO vName, vSal;
				EXIT WHEN cur_emp%NOTFOUND;
				DBMS_OUTPUT.PUT_LINE(vName || ' : ' || vSal);
            END LOOP;
			CLOSE cur_emp;
            			
		END;

		PROCEDURE empList
		IS
		BEGIN
			FOR rec IN (SELECT name, sal+bonus pay, fnTax(sal+bonus) tax FROM emp) LOOP
			DBMS_OUTPUT.PUT_LINE(rec.name || ' : ' || rec.pay || ' : ' || rec.tax );
			END LOOP;
		END;
    END pEmp;
        /
💡 패키지에 들어가는 각각의 함수, 프로시저는 END 로 끝내야한다.

 

 

 

 

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기