DATABASE(oracleDB 11g)/PLSQL

[PL/SQL]패키지 작업의 기초

SEUNGSAMI 2019. 2. 22. 10:32

패키지 작업의 기초



서브 프로그램 오버로드

- 동일한 이름의 서브 프로그램을 두 개 이상 생성하는 것을 말한다.

- 이러한 서브 프로그램들은 서로 형식 파라미터의 개수와 순서, 데이터 타입이 달라야한다.




프로시저의 잘못된 참조

블록 구조는 식별자를 참조하기 전에 선언해야함.

다음 예시를 보자

1
2
3
4
5
6
7
8
9
10
11
12
CREATE OR REPLACE PACKAGE BODY TESTTEST IS
    PROCEDURE TEST1 IS
    BEGIN
        TEST2 ;
    END TEST1 ;
    
    PROCEDURE TEST2 IS
    BEGIN
        NULL ;
    END TEST2 ;
END TESTTEST ;
/
cs

이경우 사전 선언이 잘못도되어 있으므로 4번째 라인의 TEST2에서 에러가 발생한다.

이럴경우

여러 방법이 있지만 가장 활용도가 좋은 방법으로

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE OR REPLACE PACKAGE BODY TESTTEST IS
    PROCEDURE TEST2;
 
    PROCEDURE TEST1 IS
    BEGIN
        TEST2 ;
    END TEST1 ;
    
    PROCEDURE TEST2 IS
    BEGIN
        NULL ;
    END TEST2 ;
END TESTTEST ;
/
cs

다음과 같이 PROCEDURE을 바로 정의를 하는 것이다.




패키지 초기화

- Package Body의 끝의 블록으로 위치

- Public, Private 패키지 변수를 초기화 하는데 사용

다음예시를 참고하자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CREATE OR REPLACE PACKAGE avg_pkg IS
    v_std_avg NUMBER ;
    PROCEDURE proc1 (p_empno NUMBER) ;
END avg_pkg ;
/
Package created.
 
 
CREATE OR REPLACE PACKAGE BODY avg_pkg IS
    PROCEDURE proc1 (p_empno NUMBER) IS
    BEGIN
        NULL ;
    END ;
 
--여기부터 패키지 
    BEGIN
        SELECT AVG(sal) INTO v_std_avg
        FROM emp ;
END avg_pkg ;
/
cs




패키지의 지속성

패키지는 기본적으로 지속성을 지니고 있으나, 이를 원하지 않는다면, 바디 선언부에 다음의 구문을 추가하다.


PRAGMA SERIALLY_REUSABLE ;


1
2
3
4
5
6
7
8
9
CREATE OR REPLACE PACKAGE BODY ... IS
 
PRAGMA SERIALLY_REUSABLE ;
 
 
FUNCTION ... IS
...
BEGIN
...
cs




SQL을 배운지 얼마 되지 않아 잘못된 내용이 있을 수 있습니다. 틀린 내용이있다면, 댓글로 달아주세요.