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

 

 

 

복사했습니다!