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