패키지 작업의 기초
서브 프로그램 오버로드
- 동일한 이름의 서브 프로그램을 두 개 이상 생성하는 것을 말한다.
- 이러한 서브 프로그램들은 서로 형식 파라미터의 개수와 순서, 데이터 타입이 달라야한다.
프로시저의 잘못된 참조
블록 구조는 식별자를 참조하기 전에 선언해야함.
다음 예시를 보자
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을 배운지 얼마 되지 않아 잘못된 내용이 있을 수 있습니다. 틀린 내용이있다면, 댓글로 달아주세요.
'DATABASE(oracleDB 11g) > PLSQL' 카테고리의 다른 글
[PL/SQL]코드 설계 고려 사항 기초 (0) | 2019.02.22 |
---|---|
[PL/SQL]동적 SQL의 기초 (0) | 2019.02.22 |
[PL/SQL]예외처리의 기초 (0) | 2019.02.20 |
[PL/SQL]명시적 커서 기초 (0) | 2019.02.19 |
[PL/SQL]조합 데이터 유형 작업 기초 (0) | 2019.02.19 |