-- 패키지 선언
CREATE OR REPLACE PACKAGE pEmp IS
FUNCTION fnTax( p IN NUMBER ) RETURN NUMBER;
PROCEDURE empList(pName VARCHAR2);
PROCEDURE empList; -- 중복 정의 (패키지 안에서는 가능)
END pEmp;
/
앞으로 만들 FUNCTION과 PROCEDURE을 선언할 수 있습니다.
-- 패키지 몸체 구현
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, -1);
ELSIF p >= 2000000 THEN
t := TRUNC(p * 0.02, -1);
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;
/
-- 패키지 확인
SELECT * FROM user_objects;
SELECT * FROM user_objects WHERE object_type = 'PACKAGE';
SELECT * FROM user_procedures;
-- 실행
EXEC pEmp.empList;
EXEC pEmp.empList('김');
-- 패키지에 있는 함수를 SELECT 문에서도 사용할 수 있다.
SELECT name, sal, bonus, sal+bonus, pEmp.fnTax( sal+bonus) tax FROM emp;
-- 패키지 삭제
DROP PACKAGE 패키지명;
DROP PACKAGE BODY 패키지명;
선언부를 삭제하게 되면 몸체도 자동으로 삭제가 된다.
'쌍용강북교육센터 > 8월' 카테고리의 다른 글
0820_Oracle[PL/SQL] : CURSOR 커서 (0) | 2021.08.23 |
---|---|
0820_Oracle[PL/SQL] : TRIGGER 트리거 (0) | 2021.08.23 |
0820_Oracle : INDEX (0) | 2021.08.23 |
0819_Oracle[PL/SQL] : PROCEDURE, FUNCTION 예제 (2) | 2021.08.20 |
0818_Oracle : IDENTITY COLUMN (2) | 2021.08.19 |