패키지(Pacakage)란 '꾸러미' 라는 사전적인 의미가 있다. 패키지는 업무와 관련된 Stored Procedure 및 Stored Function을 관리하고, 이를 패키지 단위로 배포할 때 유용하게 사용된다.
패키지 선언부는 SP, SF, Public변수, 커서 및 예외절의 선언등을 포함할 수 있다. 패키지 선언부에 선언된 모든 요소들의 적용 범위는 패키지 전체에 해당된다.
-- 패키지 선언부
CREATE OR REPLACE PACKAGE emp_pack IS
PROCUDURE empno;
PROCUDURE emp_salary;
END emp_pack
-- 패키지 본문
CREATE OR REPLACE PACKAGE BODY emp_pack
IS
PROCEDURE empno
IS
BEGIN
Statement;
End empno;
PROCEDURE emp_salary
IS
BEGIN
Statement;
END emp_salary;
END emp_pack
EXEC emp_pack.emp_salary;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------앞서 생성한 SP info_salary 와 tax()함수를 패키지에 포함해보기
CREATE OR REPLACE PACKAGE emp_pack
IS
PROCEDURE info_salary (p_empid employees.employee_id%TYPE);
FUNCTION tax (p_sal IN employees.salary%TYPE, p_bonus employees.commission_pct%TYPE)
RETURN NUMBER;
END emp_pack;
CREATE OR REPLACE PACKAGE BODY emp_pack
IS
-- SP info_salary 구현 부분
PROCEDURE info_salary (p_empid employees.employee_id%TYPE)
IS
l_empname employees.last_name%TYPE;
l_sal employees.salary%TYPE;
l_rank CHAR(1);
l_tax NUMBER;
BEGIN
SELECT last_name, salary,
CASE WHEN salary < 1000 THEN 'C'
WHEN salary BETWEEN 1000 AND 2000 THEN 'B'
WHEN salary > 2000 THEN 'A'
END CASE,
tax(salary, commission_pct)
INTO l_empname, l_sal, l_rank, l_tax
FROM employees
WHERE employee_id = p_empid;
DBMS_OUTPUT.PUT_LINE (p_empid || ' ' || l_empname || ' ' || l_sal || ' ' || l_rank || ' ' || l_tax);
END info_salary;
-- 사용자 정의 함수 tax 의 구현부분
FUNCTION tax (p_sal IN employees.salary%TYPE, p_bonus employees. commission_pct%TYPE)
RETURN NUMBER
IS
l_sum NUMBER;
l_tax NUMBER;
BEGIN
l_sum := p_sal + NVL(p_bonus, 0) * 100
IF l_sum < 1000 THEN l_tax := l_sum * 0.05;
ELSIF l_sum < 2000 THEN l_tax := l_sum * 0.1;
ELSE l_tax := l_sum * 0.2;
END IF;
RETURN (l_tax);
END tax;
END emp_pack;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
만든 패키지 다른 사용자에게 선물하기
GRANT EXECUTE ON emp_pack TO scott;
테스트
CONN scott
SET SERVEROUTPUT ON;
EXEC hr.emp_pack.info_salary(146)
CONN scott
SET SERVEROUTPUT ON;
EXEC hr.emp_pack.info_salary(146)
권한 회수하기
REVOKE EXECUTE ON emp_pack FROM scott;
'DB > Oracle' 카테고리의 다른 글
[Oracle] 오라클 기본정리(2) (1) | 2022.08.29 |
---|---|
[Oracle] 오라클 기본정리(1) (0) | 2022.08.29 |
[Oracle] 오라클 쿼리 SP_CONTRACT_VALUE_ITEM_INSERT& SP_CONTRACT_VALUE_ITEM_UPDATE (0) | 2022.08.26 |
[Oracle] 사용자 정의 함수(Stored Function) (0) | 2022.08.23 |
[Oracle] EXCEPTION(예외처리) 예제 (0) | 2022.08.22 |