P/L SQL PACKAGE
오라클 데이터베이스에 저장되어 있는 프로시저, 함수들의 집합체이며 패키지의 구성은
선언부(Specification)과 본문(Body)로 구성됨.
1. 형식
--Specification 부분
CREATE [OR REPLACE] PACKAGE package_name
[AUTHID {CURRENT_USER | DEFINER}]
{IS | AS }
[PRAGMA SERIALLY_REUSABLE;]
[collection_type_definition …]
[record_type-definition …]
[subtype_definition …]
[collection_declaration …]
[constant_declaration …]
[exception_declaration …]
[object_declaration …]
[record_declaration …]
[variable_declaration …]
[cursor_spec …]
[function_spec …]
[procedure_spec …]
[call_spec …]
[PRAGMA RESTRICT_REFERENCES (assertions) …]
END [package_name];
--Body 부분
[CREATE [OR REPLACE] PACKAGE BODY package_name {IS | AS}
[PRAGMA SERIALLY_REUSABLE;]
[collection_type_definition …]
[record_type-definition …]
[subtype_definition …]
[collection_declaration …]
[constant_declaration …]
[exception_declaration …]
[object_declaration …]
[record_declaration …]
[variable_declaration …]
[cursor_body …]
[function_spec …]
[procedure_spec …]
[call_spec …]
[BEGIN
squence_of_statements]
END [package_name]; ]
여기서 패키지 선언부(Specification)은 패키지에 포함될 PL/SQL 프로시저 및 함수 외에 퍼블릭(Public) 변수 선언과 커서(Cursor) 및 예외절 등을 포함한다.
여기서 퍼블릭 변수는 패키지 전체에 적용되는 변수임을 기억하자.
다음으로 패키지 본문(Body)는 패키지 선언부에서 선언된 변수들, 프로시저, 함수 들을 정의하는 부분이다.
실제 EMP 테이블의 클론인 EMP_BACK 테이블을 가지고 알아보자.
2. 패키지 선언과 본문 스크립
--패키지 선언(Specification)
CREATE OR REPLACE PACKAGE emp_back_pack
IS
v_counter NUMBER :=0;
PROCEDURE empno_out;
PROCEDURE ename_out;
PROCEDURE job_out;
PROCEDURE hiredate_out;
PROCEDURE deptno_out;
PROCEDURE salary_out;
END emp_back_pack;
/
--패키지 본문(BODY)
CREATE OR REPLACE PACKAGE BODY emp_back_pack
IS
-- emp_back_cursor 생성
CURSOR emp_back_cursor IS
SELECT * FROM EMP_BACK;
-- emp_back_procedure
PROCEDURE empno_out IS
BEGIN
DBMS_OUTPUT.ENABLE;
DBMS_OUTPUT.PUT_LINE('직원번호');
DBMS_OUTPUT.PUT_LINE('--------------');
FOR crec IN emp_back_cursor
DBMS_OUTPUT.PUT_LINE(' ' || TO_CHAR(crec.empno));
END
END empno_out;
-- emp_back_ename_out
PROCEDURE ename_out IS
BEGIN
DBMS_OUTPUT.ENABLE;
DBMS_OUTPUT.PUT_LINE('직원이름');
DBMS_OUTPUT.PUT_LINE('--------------');
FOR crec IN emp_back_cursor
DBMS_OUTPUT.PUT_LINE(' ' || crec.ename);
END
END ename_out;
-- emp_back_job_out
PROCEDURE job_out IS
BEGIN
DBMS_OUTPUT.ENABLE;
DBMS_OUTPUT.PUT_LINE('업무 직함');
DBMS_OUTPUT.PUT_LINE('--------------');
FOR crec IN emp_back_cursor
DBMS_OUTPUT.PUT_LINE(' ' || crec.job);
END
END job_out;
-- emp_back_hiredate_out
PROCEDURE hiredate_out IS
BEGIN
DBMS_OUTPUT.ENABLE;
DBMS_OUTPUT.PUT_LINE('입사일');
DBMS_OUTPUT.PUT_LINE('--------------');
FOR crec IN emp_back_cursor
DBMS_OUTPUT.PUT_LINE(' ' || crec.hiredate);
END
END hiredate_out;
-- emp_back_deptno_out
PROCEDURE deptno_out IS
BEGIN
DBMS_OUTPUT.ENABLE;
DBMS_OUTPUT.PUT_LINE('부서번호');
DBMS_OUTPUT.PUT_LINE('--------------');
FOR crec IN emp_back_cursor
DBMS_OUTPUT.PUT_LINE(' ' || TO_CHAR(crec.deptno));
END
END deptno_out;
-- emp_back_salary_out
PROCEDURE salary_out IS
BEGIN
DBMS_OUTPUT.ENABLE;
DBMS_OUTPUT.PUT_LINE('월급');
DBMS_OUTPUT.PUT_LINE('--------------');
FOR crec IN emp_back_cursor
DBMS_OUTPUT.PUT_LINE(' ' || TO_CHAR(crec.sal));
END
END salary_out;
END emp_back_pack;
/
3. 실행 결과
패키지 선언부 생성
패키지 본문 생성
실행결과
SQL>SET SERVEROUTPUT ON 을 실행한 후 위와 같이 EXECUTE 문을 써서 실행하면
원하는 결과를 얻을 수 있음.
출처 : http://infomercial.tistory.com/168
'데이터베이스 > 오라클' 카테고리의 다른 글
오라클 NLS_LANG 설정변경 (0) | 2010.08.16 |
---|---|
Oracle 시스템정보보기 관련 쿼리 (0) | 2010.08.16 |
View, Sequence, Synonym, Index (0) | 2010.08.16 |
오라클 데이터사전 (0) | 2010.08.16 |
인덱스 저장위치 설정 (0) | 2010.08.16 |