DBMS_PIPE

개요

DBMS_PIPE은 동일한 인스턴스 내에 속해 있는 세션들 간에 통신할 수 있는 기능을 지원하는 패키지이다.

함수 / 프로시저
반환 타입
설명

CREATE_PIPE(pipename [, maxpipesize ] [, private ])

INTEGER

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

NEXT_ITEM_TYPE

INTEGER

로컬 메시지 버퍼에 저장되어 있는 다음 아이템의 데이터 타입을 알려주는 함수이다.

PACK_MESSAGE(item)

n/a

로컬 메시지 버퍼 안에서 메시지를 만드는 프로시저이다. 이 프로시저를 호출하여 로컬 버퍼에 단위 데이터(아이템)를 저장하고, 1개 이상의 아이템이 저장되면 SEND_MESSAGE한다.

PURGE(pipename)

n/a

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

RECEIVE_MESSAGE(pipename [, timeout ])

INTEGER

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

REMOVE_PIPE(pipename)

INTEGER

명시적으로 생성된 파이프 및 파이프에 저장되어 있던 모든 내용을 제거하는 함수이다.

RESET_BUFFER

n/a

로컬에 있는 읽기 버퍼 및 쓰기 버퍼의 모든 내용을 비우는 프로시저이다.

SEND_MESSAGE(pipename [, timeout ] [, maxpipesize ])

INTEGER

로컬 버퍼에 저장되어 있던 메시지를 파이프에 저장하는 함수이다.

UNIQUE_SESSION_NAME

TEXT

데이터베이스에 연결되어 있는 모든 세션들 중에 식별할 수 있는 유일한 이름을 반환하는 함수이다.

UNPACK_MESSAGE(item OUT)

n/a

로컬 메시지 버퍼 안에 저장되어 있는 아이템 하나를 읽어오는 프로시저이다.


권한

설치는 super user에 이루어져야 하고 public으로 공개되어 있다.


구성

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

CREATE_PIPE

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

프로토타입

DBMS_PIPE.CREATE_PIPE 
(
    pipename        IN  TEXT,
    maxpipesize     IN  INTEGER     DEFAULT 8192,
    private         IN  BOOLEAN     DEFAULT TRUE
) 
RETURN INTEGER;

파라미터

파라미터
설명

pipename

생성하는 파이프의 이름으로 인스턴스 내에서 고유한 값이다. SEND_MESSAGE, RECEIVE_MESSAGE를 호출할 때 이 이름을 사용하여 송수신할 수 있다.

maxpipesize

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

private

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

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

예제

SELECT DBMS_PIPE.CREATE_PIPE('tbpipe', 1000, false);                        

NEXT_ITEM_TYPE

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

프로토타입

DBMS_PIPE.NEXT_ITEM_TYPE()
RETURN PLS_INTEGER;

예제

type := DBMS_PIPE.NEXT_ITEM_TYPE;

PACK_MESSAGE

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

프로토타입

DBMS_PIPE.PACK_MESSAGE (item  IN  TEXT);
DBMS_PIPE.PACK_MESSAGE (item  IN  TIMESTAMP);
DBMS_PIPE.PACK_MESSAGE (item  IN  NUMERIC);
DBMS_PIPE.PACK_MESSAGE (item  IN  BYTEA);

파라미터

파라미터
설명

item

로컬 버퍼에 저장할 아이템이다.

예제

CALL DBMS_PIPE.PACK_MESSAGE('abc');

PURGE

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

프로토타입

DBMS_PIPE.PURGE 
(
    pipename     IN  TEXT
);

파라미터

파라미터
설명

pipename

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

예제

CALL DBMS_PIPE.PURGE('tbpipe');

RECEIVE_MESSAGE

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

프로토타입

DBMS_PIPE.RECEIVE_MESSAGE 
(
    pipename        IN      TEXT,
    timeout         IN      INTEGER DEFAULT MAXWAIT
) 
RETURN INTEGER;

파라미터

파라미터
설명

pipename

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

timeout

메시지를 기다릴 시간을 초 단위로 설정한다.

(기본값: MAXWAIT, 86400000(1000일))

예제

status := DBMS_PIPE.RECEIVE_MESSAGE('tbpipe');

REMOVE_PIPE

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

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

프로토타입

DBMS_PIPE.REMOVE_PIPE 
(
    pipename    IN      TEXT
) 
RETURN INTEGER;

파라미터

파라미터
설명

pipename

제거하려는 파이프의 이름이다.

예제

status := DBMS_PIPE.REMOVE_PIPE('tbpipe');                        

RESET_BUFFER

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

프로토타입

DBMS_PIPE.RESET_BUFFER();

예제

CALL DBMS_PIPE.RESET_BUFFER();

SEND_MESSAGE

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

프로토타입

DBMS_PIPE.SEND_MESSAGE 
(
    pipename        IN      TEXT,
    timeout         IN      INTEGER DEFAULT MAXWAIT,
    maxpipesize     IN      INTEGER DEFAULT 8192
) 
RETURN INTEGER;

파라미터

파라미터
설명

pipename

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

timeout

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

maxpipesize

Byte 단위이며, 파이프에 해당 메시지를 보낼 때 사용가능한 최대 크기이다. 최대 사이즈를 초과하는 경우, 메시지를 파이프에 쓰지 못한다.(기본값: 8192Bytes)

예제

status := DBMS_PIPE.SEND_MESSAGE('tbpipe');

UNIQUE_SESSION_NAME

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

프로토타입

DBMS_PIPE.UNIQUE_SESSION_NAME()
RETURN TEXT;

예제

text := DBMS_PIPE.UNIQUE_SESSION_NAME();

UNPACK_MESSAGE

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

프로토타입

DBMS_PIPE.UNPACK_MESSAGE(item  OUT TEXT);
DBMS_PIPE.UNPACK_MESSAGE(item  OUT TIMESTAMP);
DBMS_PIPE.UNPACK_MESSAGE(item  OUT NUMERIC);
DBMS_PIPE.UNPACK_MESSAGE(item  OUT BYTEA);

파라미터

파라미터
설명

item

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

예제

CALL DBMS_PIPE.UNPACK_MESSAGE(msg);

Last updated