DataBase/oracle

oracle PL/SQL_패키지

HUCHUCHU 2020. 4. 20. 23:52

 

패키지 : 연관성있는 함수나 프로시저를 그룹으로 모아놓은 개념

패키지의 구성 : 선언부 + 몸체부 ( 선언부에서 선언되지않아도 몸체부에서 사용가능. but 권장x)

   ***구문형식

create [or replace] package 패키지명

is [as]

     procedure 프로시저1이름,

     procedure 프로시저2이름,

     ....

end;

create [or replace] package body 패키지명

is [as]

     procedure 프로시저이름

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

end;

 

< 패키지의 실행 >

패키지는 여러 환경하여 호출되어 실행 가능

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

 

<패키지 삭제>

선언부와 몸채부 모두 삭제 or 몸체부만 삭제 가능

drop package 패키지명;

drop package body 패키지명;

 

패키지 선언부

1
2
3
4
5
create or replace package emp_proc is
    procedure emp_sum;
    procedure emp_avg;
end;
/
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

 

패키지 body

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
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;
            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;
            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; --패키지 끝
/
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

 

패키지 실행

1
2
3
4
--패키지 실행방법  : exec 패키지명.프로시저이름
 
exec emp_proc.emp_avg;
exec emp_proc.emp_sum;