본문 바로가기

Programming/DataBase

(SQL)프로시저와 함수의 모임 패키지에 대해 알아봅시다

728x90
반응형


▣ 패키지란??

  ▷ 연관성이 있는 함수나 프로시저를 그룹으로 모아놓은 개념이다.



▣ 패키지의 구성

  ▷ 선언부 + 몸체부로 구성되어 있다.

  ※ 패키지 선언부에 선언이 되어있지 않더라도 패키지 몸체부에서 사용할 수 있지만, 권장사항은 아니다.



  ◈ 선언부

    ▶ 구문 형식

       - CREATE [OR REPLACE] PACKAGE 패키지명

          IS [AS]

             PROCEDURE 프로시저1이름.

             PROCEDURE 프로시저2이름,

              . . .

          END;

          /

  ◈ 몸체부

    ▶ 구문 형식

       - CREATE [OR REPLACE] PACKAGE BODY 패키지명

         //선언부와 패키지명이 같아야 한다.

         IS [AS]

         PROCEDURE 프로시저 이름

        subprogram bodies : 실제 작동하게 될 서브프로그램(프로시저, 함수)

         end;

         /


▣ 패키지의 실행

  ▷ 패키지는 여러 환경에서 호출되어 실행가능하다.

  ▷ 패키지에 대한 실행권한을 가진 사용자만 실행시킬 수 있다.

  ▷ 실행방법

     - exec 패키지명.프로시저명 or execute 패키지명.프로시저명


▣ 패키지의 삭제

  ▷ 선언부와 몸체부를 모두 삭제할 수 있다.

  ▷ 몸체부만 따로 삭제할 수도 있다.

  ▷ 삭제방법

     - DROP PACKAGE 패키지명;         -- 선언부, 몸체부 모두 삭제

     - DROP PACKAGE BODY 패키지명; -- 몸체부만 삭제


사용예시)


<선언부>

1
2
3
4
5
6
create or replace package emp_proc
  is
     procedure emp_sum;
     procedure emp_avg;
  end;
  /
cs

1) 선언부로 패키지 생성을 한 후, 프로시저를 선언해준다.

2) 선언부를 만들고 실행을 시켜줘야 작동을 할 수 있다.


<몸체부>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
create or replace package body emp_proc as
  procedure emp_sum
  is
     cursor emp_tot_sum is 
     select count(*), sum(nvl(sal,0))
     from emptest2;
     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; -- emp_sum 프로시저의 끝
     
     procedure emp_avg
     is
     cursor emp_tot_avg is
     select count(*), avg(nvl(sal,0))
     from emptest2;
     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; -- emp_avg 프로시저의 끝
end; --패키지의 끝을 알려줌
/
cs

1) 몸체부로 위에서 선언해 준 프로시저들을 작성해준다.

2) 패키지의 끝과, 패키지의 끝을 잘 구분하자.


<실행>

1
2
3
exec emp_proc.emp_avg;
 
exec emp_proc.emp_sum;
cs

1) exec 패키지명.프로시저명 으로 실행한다.

반응형