[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 로 끝내야한다.
'SQL쿼리' 카테고리의 다른 글
[Oracle] 오라클 - Top-N / 페이징 처리 / INVISIBLE column (0) | 2022.08.18 |
---|---|
[Oracle] 오라클 - 계정관리 (서버 연결, 패스워드 변경, 실행) (0) | 2022.08.18 |
[Oracle] 오라클 - PL/SQL (트리거 Trigger) (0) | 2022.08.17 |
[Oracle] 오라클 - PL/SQL (예외처리) (0) | 2022.08.17 |
[Oracle] 오라클 - PL/SQL 커서(Cursor) / 동적쿼리 (0) | 2022.08.17 |
블로그의 정보
개발자 미니민의 개발로그
mini_min