제1장 패키지 소개

내용 목차

1.1. 개요
1.2. 구성
1.2.1. 사용자 정의 패키지
1.2.2. 시스템 패키지

본 장에서는 패키지의 기본 개념과 구성을 소개한다.

패키지(package)는 하나 이상의 tbPSM 프러시저(procedure)와 함수(function) 등을 포함하는 스키마 객체이다. 하나의 패키지에 포함되는 스키마 객체는 프러시저와 함수를 비롯하여 변수, 커서(cursor), 예외 상황(exception) 등이 있다.

패키지는 프러시저, 함수와 마찬가지로 임의의 SQL 문장에서 사용할 수 있다.

패키지를 사용함으로써 얻을 수 있는 장점은 다음과 같다.

  • 연관된 프러시저와 함수의 개발과 관리가 쉽다.

    예를 들어 여러 프러시저와 함수에서 공통으로 액세스하는 변수를 패키지에 포함시킬 수 있다.

  • 애플리케이션 프로그램의 개발이 쉽다.

    패키지에서 지원하는 여러 기능을 이용하면 좀 더 강력한 애플리케이션 프로그램을 작성할 수 있다.

  • 효율적인 실행이 가능하다.

    권한의 부여와 회수, 메모리 로딩(memory loading) 등이 패키지 단위로 수행되기 때문에 효율적인 실행이 가능하다.

패키지는 사용자 정의 패키지Tibero에서 제공하는 시스템 패키지로 구성된다.

사용자 정의 패키지는 사용자가 원하는 목적에 맞춰 정의하는 패키지이다. 사용자 정의 패키지는 프러시저, 함수와 유사하게 다음과 같이 정의할 수 있다.

패키지 선언부

외부 인터페이스이며 공개 프러시저(public procedure)와 함수, 변수, 상수 등을 포함한다.

패키지 선언부의 세부 내용은 다음과 같다.

패키지 구현부

실제 프로그램이 구현되는 부분이다. 공개 프러시저와 함수 등의 프로그램 구현부와 함께 비공개 프러시저(private procedure)와 함수, 변수 등을 포함한다.

패키지 구현부의 세부 내용은 다음과 같다.

패키지 프러시저와 함수를 정의하는 방법은 패키지 변수, 상수, 예외 상황에 대한 내용 외에는 일반 프러시저 및 함수를 정의하는 방법과 동일하다.

프러시저 또는 함수 내부의 컬럼의 이름과 변수의 이름이 같은 경우 컬럼이 포함된 테이블의 이름이나 프러시저 또는 함수의 이름을 지정하여 혼동을 피할 수 있다. 예를 들어 프러시저 FIRE 함수의 내부에서 테이블 EMP에 포함된 컬럼 EMPNO와 프러시저 FIRE로 전달된 파라미터 변수 EMPNO가 같은 이름을 가지므로, 각각 테이블 이름과 프러시저 이름을 지정해 주었다.

패키지 내에 포함된 프러시저나 함수를 그 패키지의 소유자 이외의 다른 사용자가 호출하도록 할 수 있다. 프러시저나 함수를 호출하려면 해당 패키지의 EXECUTE 권한을 부여 받아야 한다. 해당 패키지의 소유자는 항상 해당 패키지를 호출할 수 있다.

뷰(view)가 패키지 프러시저나 함수를 이용하여 정의된 경우에는 뷰를 접근하기 위해 SELECT 권한을 부여 받아야 한다. 이때 해당 패키지의 EXECUTE 권한은 필요하지 않다. 패키지 프러시저나 함수를 참조하려면 패키지의 이름과 프러시저 또는 함수의 이름을 함께 써주어야 한다.

다음은 [예 1.1]에서 정의한 EMP_MGMT 패키지 내의 HIRE 함수를 호출하는 예이다. 이때 반환값은 EMPNO 변수에 저장된다.

DECLARE
    empno NUMBER;
BEGIN
    empno := EMP_MGMT.HIRE('John', 'New York', 45000, 5);
    DBMS_OUTPUT.PUT_LINE('Hired employee No. is ' || empno);
END;

시스템 패키지Tibero에서 기본적으로 제공하는 패키지 라이브러리로, SYS 사용자의 소유로 정의된다. 또한, Tibero를 설치한 후에 일반 사용자도 사용할 수 있도록 시스템 패키지와 동일한 이름의 공용 동의어(Public Synonym)가 정의된다. 그리고 일반 사용자가 시스템 패키지의 프러시저 또는 함수를 호출하면 호출자 권한으로 실행된다.

시스템 패키지는 일반 사용자에게 여러 가지의 확장된 기능을 제공한다. 시스템 패키지를 SQL 문장에서 그대로 사용한다거나, 다른 프러시저와 함수 그리고 패키지를 정의할 때도 사용할 수 있다.

시스템 패키지의 프러시저와 함수를 호출하는 방법은 사용자 정의 패키지와 같다.

다음은 32KB 이상인 대용량 객체의 이름과 생성자를 출력하는 예이다.

SELECT name, creator FROM image 
WHERE DBMS_LOB.GETLENGTH(data) >= 32768;

위 예에서 보듯이 data는 image 테이블에서 대용량 객체형으로 정의된 컬럼이다.

다음은 Tibero에서 제공하는 시스템 패키지이다.

시스템 패키지설명
ANYDATA임의의 타입을 담을 수 있는 타입이다.
DBMS_ALERTALERT은 Tibero 데이터베이스와 통합되어 있는 알림/기다림 기능을 하는 패키지이다.
DBMS_APPLICATION_INFO애플리케이션 정보에 관련된 뷰의 값을 변경하기 위한 패키지이다.
DBMS_AQAdvanced Queuing 기능과 관련한 프러시저와 함수를 제공하는 패키지이다.
DBMS_AQADMAdvanced Queuing 기능을 구성하고 관리하는 데 사용할 수 있는 프러시저와 함수를 제공한다.
DBMS_CRYPTODES, DES3, AES 알고리즘 및 체인, 패딩 기법을 이용한 확장된 데이터 암호화 및 복호화 패키지이다.
DBMS_DB_VERSION제품의 버전 정보를 확인하는 패키지이다.
DBMS_DDLCREATE OR REPLACE PROCEDURE, PACKAGE로 시작하는 DDL 구문에 대한 WRAPPING 기능 외 기타 DDL 관련 기능을 제공하는 패키지이다.
DBMS_DEBUG두 개의 세션을 이용하여 PSM 프로그램의 디버깅을 할 수 있는 패키지이다.
DBMS_ERRLOGDML의 error logging 기능을 지원하는 패키지이다.
DBMS_FLASHBACKFlashback 기능을 지원하는 패키지이다.
DBMS_JAVA데이터베이스에서 사용하는 Java 객체에 접근하기 위한 패키지이다.
DBMS_JOBJOB을 관리하기 위한 패키지이다.
DBMS_JOB_WITH_NAMEJOB을 name을 통해 관리하기 위한 패키지이다.
DBMS_LOBBLOB, CLOB 타입의 대용량 데이터를 처리하기 위한 패키지이다.
DBMS_LOCK세션을 대기시키는 패키지이다.
DBMS_METADATADB Object에 metadata 정보를 조회하여 생성 script를 얻을 수 있는 함수를 제공한다.
DBMS_MONITOR인스턴스 단위, 세션 단위, 클라이언트 식별자 단위로 SQL 수행을 모니터링하기 위한 패키지이다.
DBMS_MVIEW실체화 뷰(Materialized View)와 관련된 정보를 제공하고 이 정보를 최근의 것으로 변경할 수 있는 REFRESH 기능을 사용하기 위한 패키지이다.
DBMS_OBFUSCATION_TOOLKITDES, DES3 알고리즘을 이용한 데이터 암호화 및 복호화 패키지이다.
DBMS_OUTPUT메시지 버퍼에 메시지를 저장하고 읽기 위한 패키지이다.
DBMS_PIPE동일 인스턴스에 속해 있는 세션들 간의 통신을 지원하는 패키지이다.
DBMS_RANDOM임의의 숫자 및 문자열을 생성하는 패키지이다.
DBMS_REDEFINITION온라인 상태(on-line state)에서 특정 테이블을 재정의하기 위한 패키지이다.
DBMS_REPAIR테이블과 인덱스 내의 깨진 블록을 검사하고 복구하는 기능을 제공하는 패키지이다.
DBMS_RESOURCE_MANAGER업무의 성격에 따라 그룹을 나누어 자원을 분배할 수 있다.
DBMS_RESULT_CACHEResult Cache를 관리하는 패키지이다.
DBMS_RLS가상 개인 데이터베이스 기능을 관리하는 패키지이다.
DBMS_ROWIDROWID에 담긴 정보를 보거나 생성하기 위한 패키지이다.
DBMS_SCHEDULERPSM으로 작성된 프로그램을 스케줄링하고 관리하기 위한 패키지이다.
DBMS_SESSION세션 식별자를 관리하는 패키지이다.
DBMS_SPACE세그먼트(segment)의 크기와 공간 사용에 대한 정보를 제공하는 패키지이다.
DBMS_SPACE_ADMIN세그먼트를 관리하는 기능을 제공하는 패키지이다.
DBMS_SPHSQL Plan History(이하 SPH) 기능을 사용하는데 필요로 하는 기능을 제공하기 위한 패키지이다.
DBMS_SQL데이터베이스에 접근하는 Dynamic SQL을 사용하기 위한 패키지이다.
DBMS_SQLTUNE실시간 SQL 모니터링 기능에 대한 보고서를 생성해 주는 함수를 제공하고 있는 패키지이다.
DBMS_SQL_TRANSLATORSQL 번역 프로파일을 관리 및 사용하는 패키지이다.
DBMS_STATS데이터베이스 객체에 대한 통계 정보를 관리하기 위한 패키지이다.
DBMS_SYSTEMSYS 권한을 가진 관리자가 시스템적인 제어를 위해 사용하는 패키지이다.
DBMS_TPRTibero Performance Repository(이하 TPR) 기능을 사용하는데 필요로 하는 기능을 제공하기 위한 패키지이다.
DBMS_TRANSACTION트랜잭션(Transaction) 문장을 실행하고 트랜잭션을 관리하기 위한 패키지이다.
DBMS_TYPES데이터 타입들을 숫자로 정의한 패키지이다.
DBMS_UTILITY여러 가지 유용한 기능들을 제공하는 패키지이다.
DBMS_VERIFY여러 요소들에 대하여 정합성을 검사하는 기능을 제공한다.
DBMS_XMLDOMXML 문서 처리를 위한 DOM API를 제공한다.
DBMS_XMLGEN쿼리를 입력으로 받고 해당 쿼리의 결과 집합을 XML형식으로 생성해주는 패키지이다.
DBMS_XPLANSQL의 플랜 정보와 수행 정보를 조회하는 기능을 제공하는 패키지이다.
HTFHTML 태그를 생성하는 패키지이다.
HTPHTML 태그를 생성하는 패키지이다. Apache 웹 서버 모듈로 개발된 mod_tbpsm과 연동되어 프러시저를 호출할 때 HTML 페이지를 생성하여 내보낸다.
OWA_UTIL웹 에이전트에서 주로 사용하는 서브 프로그램을 담고 있는 패키지이다.
TEXT_DDLTEXT INDEX를 사용할 때 TEXT INDEX의 설정들을 변경하기 위한 패키지이다.
UTL_COMPRESS데이터를 압축/압축해제하기 위한 패키지이다.
UTL_ENCODE호스트 간의 데이터를 전송할 수 있도록 표준 인코딩 기술로 인코딩하기 위한 패키지이다.
UTL_FILE운영체제에서 관리하는 파일에 접근하기 위한 패키지이다.
UTL_HTTP웹 표준(RFC2616)에 따라 웹 페이지(Web page)의 요청을 처리하기 위한 패키지이다.
UTL_I18N언어, 국가별 설정들 간의 호환 기능을 제공하는 패키지이다.
UTL_MATCH두 문자열의 유사도를 계산하는 함수들을 제공하는 패키지이다.
UTL_RAWRAW 타입의 데이터를 처리하기 위한 패키지이다.
UTL_RECOMPInvalid 상태의 오브젝트를 다시 컴파일하기 위한 패키지이다.
UTL_TCPtbPSM을 이용한 원격 TCP 서버와의 TCP/IP 소켓 통신을 지원하는 패키지이다.
UTL_URLURL(Uniform Resource Locator) 주소를 ESCAPE 형태로 변환하기 위한 패키지이다.

참고

위의 패키지에 대한 자세한 내용은 해당 패키지를 설명하는 각 장을 참고한다.