- 생성 방법
1) CREATE PACKAGE
Package Spec에 선언된 변수는 기본적으로 NULL로 초기화된다. Spec에 있는 변수는 Body이 정의되어 있지 않아도 접근 가능하다. 아래 예제에서 공용 변수와 커서는 지속되므로, 계속 그 값이 유지된다. 다만 세션 별로 관리 되기 때문에(PGA에서) 다른 세션에서는 별도로 다른 값을 갖는다.
CREATE [OR REPLACE] PACKAGE package_name IS|AS public type and variable declarations subprogram specifications END [package_name]; |
Package Spec 예제
CREATE OR REPLACE PACKAGE comm_pkg IS v_std_comm NUMBER := 0.10; --initialized to 0.10 PROCEDURE reset_comm(p_new_comm NUMBER); END comm_pkg; /
--.1이 출력됨 EXECUTE DBMS_OUTPUT.PUT_LINE(COMM_PKG.V_STD_COMM); |
2) CREATE BODY
Package Body에 정의된 식별 자는 전용(private)이므로 Package Body 외부에서 볼 수 없다. 또한 모든 전용 생성자는 참조되기 전에 선언되어야 한다. 아래 예제에서 reset_comm이라는 프로시저는 validate 함수를 사용하고 있기 때문에, 먼저 validate 함수가 선언되어야 한다. 하지만, 공용(public) 생성자는 Spec에 선언되어 있기 때문에 순서와 상관 없이 사용 가능하다. 아래 예제에서 validate 함수 헤더가 Spec에 있다고 한다면 Body의 위치와 상관없이 사용 가능한 것이다.
CREATE [OR REPLACE] PACKAGE BODY package_name IS|AS private type and variable declarations subprogram bodies [BEGIN initialization statements] END [package_name]; |
Package Body 예제
CREATE OR REPLACE PACKAGE BODY comm_pkg IS -- 함수 작성부분. Spec에 선언되어 있지 않으므로 내부에서만 사용가능 FUNCTION validate(p_comm NUMBER) RETURN BOOLEAN IS v_max_comm employees.commission_pct%type; BEGIN SELECT MAX(commission_pct) INTO v_max_comm FROM employees; RETURN (p_comm BETWEEN 0.0 AND v_max_comm); END validate; -- 프로시저 작성부분. 내부 validate 함수를 사용한 것을 볼 수 있다. PROCEDURE reset_comm (p_new_comm NUMBER) IS BEGIN IF validate(p_new_comm) THEN v_std_comm := p_new_comm; -- reset public var ELSE RAISE_APPLICATION_ERROR( -20210, 'Bad Commission'); END IF; END reset_comm; END comm_pkg; |
'PL SQL' 카테고리의 다른 글
PL/SQL 개관 - 1 (정의, 특징, 장점, Block의 종류) (0) | 2016.07.07 |
---|---|
PL/SQL 패키지 (Package) - 3 (패키지 작성 지침, 오버로드, 지속 상태, 상수 및 예외 표준화) (0) | 2016.07.07 |
PL/SQL 패키지 (Package) - 1 (정의, 이점) (0) | 2016.07.07 |
PL/SQL 함수(Function) - 2 (표현식의 일부로 사용되는 함수, SQL문장 함수 사용 제한 사항) (0) | 2016.07.07 |
PL/SQL 함수(Function) - 1 (함수 생성, 프로시서 함수의 차이, Syntax) (0) | 2016.07.07 |