DBMS_PIPE

DBMS_PIPE 패키지의 기본 개념과 패키지 내의 프러시저와 함수를 사용하는 방법을 설명합니다.

개요

DBMS_PIPE은 동일한 인스턴스 내에 속해 있는 세션들 간에 통신할 수 있는 기능을 지원하는 패키지입니다. UNIX 계열에서 사용되는 파이프와 유사한 개념이지만 tbPSM RDBMS 내의 자료 구조를 기반으로 운영체제와는 다른 메카니즘으로 구현되어 있습니다. 동일 인스턴스 내에서의 통신만 가능하므로, TAC 환경에 서는 사용할 수 없습니다.

프러시저와 함수

본 절에서는 DBMS_PIPE 패키지에서 제공하는 프러시저와 함수를 알파벳 순으로 설명합니다.

CREATE_PIPE

명시적으로 공개 또는 사용자 소유의 통신용 파이프를 생성하는 함수입니다.

CREATE_PIPE 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

DBMS_PIPE.CREATE_PIPE
(
    pipename	    IN	   VARCHAR2,	
    maxpipesize	    IN	   PLS_INTEGER DEFAULT	8192,
    private         IN	   BOOLEAN	DEFAULT	TRUE
)
RETURN PLS_INTEGER;
  • 파라미터

파라미터
설명

pipename

  • 생성하는 파이프의 이름으로 인스턴스 내에서 고유한 값

  • SEND_MESSAGE, RECEIVE_MESSAGE를 호출할 때 이 이름을 사용하여 송수신할 수 있음

maxpipesize

메시지들을 파이프에 저장할 수 있는 최대 크기 (기본값: 8192Bytes)

private

  • TRUE : 사용자 소유의 파이프가 생성 (기본값)

  • FALSE : 모든 사용자가 공유하는 파이프가 생성

  • 반환값

반환값
설명

0

파이프 생성이 성공한 경우에 반환

  • 예제

NEXT_ITEM_TYPE

로컬 메시지 버퍼에 저장되어 있는 다음 아이템의 데이터 타입을 알려주는 함수입니다. RECEIVE_MESSAGE를 호출하여 로컬 버퍼에 가져온 다음 NEXT_ITEM_TYPE을 호출하고 반환된 타입에 맞는 UNPACK_MES SAGE 프러시저를 호출하여 데이터를 읽어올 수 있습니다.

NEXT_ITEM_TYPE 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 반환값

반환값
설명

0

더 이상 아이템이 없는 경우 반환

9

아이템의 데이터 타입이 VARCHAR2일 경우 반환

  • 예제

PACK_MESSAGE

로컬 메시지 버퍼 안에서 메시지를 만드는 프러시저입니다. 이 프러시저를 호출하여 로컬 버퍼에 단위 데이 터(아이템)를 저장하고, 1개 이상의 아이템이 저장되면 SEND_MESSAGE 함수를 호출하여 하나의 메시지로 합쳐서 파이프에 보낼 수 있습니다.

PACK_MESSAGE 프러시저의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

item

로컬 버퍼에 저장할 아이템

  • 예제

PURGE

파이프에 저장되어 있는 모든 내용을 비우는 프러시저입니다.

PURGE 프러시저의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

pipename

저장된 모든 메시지를 비울 파이프의 이름

  • 예제

RECEIVE_MESSAGE

파이프에 저장되어 있는 메시지 한 개를 로컬 버퍼에 읽어오는 함수입니다.

RECEIVE_MESSAGE 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

pipename

저장된 메시지를 읽어올 파이프의 이름

timeout

메시지를 기다릴 시간을 초 단위로 설정 (기본값: MAXWAIT, 86400000(1000일))

  • 반환값

반환값
설명

0

파이프에 저장되어 있는 메시지 한 개를 로컬 버퍼에 읽어온 경우에 반환

1

지정된 타임아웃 시간을 초과한 경우 반환

  • 예제

RESET_BUFFER

로컬에 있는 읽기 버퍼 및 쓰기 버퍼의 모든 내용을 비우는 프러시저입니다. 새로운 파이프에 대한 읽기 및쓰기를 위해 현재 로컬에 남아 있는 메시지를 비울 때 사용할 수 있습니다.

RESET_BUFFER 프러시저의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 예제

REMOVE_PIPE

명시적으로 생성된 파이프 및 파이프에 저장되어 있던 모든 내용을 제거하는 함수입니다. 단, 이 함수를 호출하지 않고 인스턴스가 종료되어도 파이프는 제거됩니다.

파이프가 제거되는 경우 0을 반환합니다. 이미 제거된 파이프에 대해서 해당 함수를 호출한 경우에도 0을 반환합니다.

REMOVE_PIPE 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

pipename

제거하려는 파이프의 이름

  • 반환값

반환값
설명

0

생성된 파이프 및 파이프에 저장되어 있던 모든 내용이 제거된 경우 반환

  • 예제

SEND_MESSAGE

로컬 버퍼에 저장되어 있던 메시지를 파이프에 저장하는 함수입니다. PACK_MESSAGE를 한 번 이상 호출하여 누적된 아이템들이 하나의 메시지로 구성되어 전송됩니다. 존재하지 않는 파이프의 이름이 인자로 들 어오는 경우, 묵시적으로 private 파이프를 생성합니다.

SEND_MESSAGE 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

pipename

메시지를 송신할 파이프의 이름

timeout

메시지를 기다릴 시간을 초 단위로 설정합니다. (기본값: MAXWAIT, 86400000(1000일))

maxpipesize

  • Byte 단위이며, 파이프에 해당 메시지를 보낼 때 사용가능한 최대 크기

  • 최대 사이즈를 초과하는 경우, 메시지를 파이프에 쓰지 못함

(기본값: 8192Bytes)

  • 반환값

반환값
설명

0

로컬 버퍼에 저장되어 있던 메시지가 파이프에 저장된 경우 반환

1

지정된 타임아웃 시간을 초과한 경우 반환

  • 예제

UNIQUE_SESSION_NAME

데이터베이스에 연결되어 있는 모든 세션들 중에 식별할 수 있는 유일한 이름을 반환하는 함수입니다. 동일 한 세션에서 이 함수를 호출할 때마다 항상 같은 값을 반환하며, 이 함수를 이용해 자신 세션 안에서만 사 용할 수 있는 파이프의 이름을 지정할 수 있습니다.

UNIQUE_SESSION_NAME 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 반환값

세션 단위로 유일한 이름입니다.

  • 예제

UNPACK_MESSAGE

로컬 메시지 버퍼 안에 저장되어 있는 아이템 하나를 읽어오는 프러시저입니다. RECEIVE_MESSAGE 함수 를 호출하여 파이프로부터 읽어온 메시지를 로컬 읽기 버퍼에 저장하고, UNPACK_MESSAGE 프러시저를 호출하여 메시지 안의 아이템들을 하나씩 가져올 수 있습니다.

UNPACK_MESSAGE 프러시저의 세부 내용은 다음과 같습니다.

  • 프로토타입

  • 파라미터

파라미터
설명

item

로컬 버퍼에서 읽어올 아이템

  • 예제

Last updated