Package
In PL/SQL, a package is a schema object that contains definitions for a group of related functionalities. A package includes variables, constants, cursors, exceptions, procedures, functions, and subprograms. It is compiled and stored in the Oracle Database.
연관성이 있는 함수나 프로시저를 그룹으로 모아놓은 개념
[ 구성 ]
- Specification(or Declaration) + Body
패키지 선언부에 선언되지 않아도 본문에서 사용 가능 ( 권장사항은 X )
Toad에서는 Spec이라고 하니까 이하 Spec이라고 쓰겠다
[ Package Spec ]
create [ or replace ] package [ Package Name ]
is[as]
Procedure1 Procedure Name1,
Procedure2 Procedure Name2,
...
end;
[ Package Body ]
create [ or replace ] package body [ Package Name ]
is [as]
Sub Program Bodies....
-- 실제 작동하게 될 서브프로그램
end;
[ 실행 ]
- 패키지는 여러 환경에서 호출되어 실행 가능
- 패키지에 대한 실행 권한을 가진 사용자만 실행시킬 수 있다.
[ 삭제 ]
- Spec + Body 삭제
- Body 만 삭제
drop package [ Package Name ];
drop package body [ Package Name ];
[ 예제 ]
- Spec
CREATE OR REPLACE PACKAGE emp_proc
IS
PROCEDURE emp_sum;
PROCEDURE emp_avg;
END;
- Body
CREATE OR REPLACE PACKAGE body emp_proc AS
PROCEDURE emp_sum
IS
CURSOR emp_tot_sum IS
SELECT COUNT(*), SUM(NVL(SALARY, 0))
FROM EMPLOYEES emp;
tot_num NUMBER;
tot_sum NUMBER;
BEGIN
OPEN emp_tot_sum;
FETCH emp_tot_sum INTO tot_num, tot_sum;
dbms_output.put_line('전체 인원 수: ' || tot_num || ', 급여 합계: ' || tot_sum);
CLOSE emp_tot_sum;
END emp_sum;
PROCEDURE emp_avg
IS
CURSOR emp_tot_avg IS
SELECT COUNT(*), AVG(NVL(SALARY, 0))
FROM EMPLOYEES e;
tot_num NUMBER;
tot_avg NUMBER;
BEGIN
OPEN emp_tot_avg;
FETCH emp_tot_avg INTO tot_num, tot_avg;
dbms_output.put_line('전체 인원 수: ' || TOT_NUM || ', 평균 급여: ' || tot_avg);
CLOSE emp_tot_avg;
END emp_avg;
END; -- END OF PACKAGE
[ 패키지 실행 ]
-- Toad
exec [ Package Name ].[ Procedure Name ];
-- DBeaver
CALL HR.emp_proc.emp_avg();
- Output
'SQL' 카테고리의 다른 글
[Oracle] Index 인덱스의 이해 1 (0) | 2020.08.27 |
---|---|
[Oracle] 트리거 Trigger, DML Trigger (0) | 2020.08.27 |
[Oracle] PL/SQL 함수 Function (0) | 2020.07.26 |
[Oracle] PL/SQL 서브 프로그램의 이해, 프로시저 (0) | 2020.07.26 |
[Oracle] PL/SQL 예외 처리의 개념, 종류, 사용법 (0) | 2020.07.16 |