UTL TCP
UTL_TCP#
UTL_TCP 패키지는 저장 프로시저에서 TCP 접속을 제어한다. UTL_TCP 패키지를 구성하는 프로시저와 함수는 아래의 표와 같이 제공한다.
프로시저 및 함수 | 설명 |
---|---|
CLOSE_ALL_CONNECTIONS | 세션에 연결된 모든 접속 핸들을 닫는다. |
CLOSE_CONNECTION | 연결된 접속 핸들을 닫는다. |
IS_CONNECT | 접속 핸들의 연결 상태를 확인한다. |
OPEN_CONNECTION | 소켓을 생성하여 원격 서버에 접속한다. |
WRITE_RAW | RAW 타입의 데이터를 원격 서버로 전송한다. |
CLOSE_ALL_CONNECTIONS#
현재 세션에 접속된 모든 접속 핸들을 닫는 프로시저이다.
구문#
UTL_TCP.CLOSE_ALL_CONNECTIONS;
결과값#
저장 프로시저이므로 반환되는 결과값은 없다.
예외#
예외를 발생시키지 않는다.
예제#
iSQL> CREATE OR REPLACE PROCEDURE PROC1
AS
BEGIN
UTL_TCP.CLOSE_ALL_CONNECTIONS();
END;
/
CLOSE_CONNECTION#
연결된 접속 핸들을 닫는 프로시저이다.
구문#
UTL_TCP.CLOSE_CONNECTION(c IN CONNECT_TYPE);
파라미터#
이름 | 입출력 | 데이터 타입 | 설명 |
---|---|---|---|
c | IN | CONNECT_TYPE | 접속 핸들 |
결과값#
저장 프로시저이므로 반환되는 결과값은 없다.
예외#
예외를 발생시키지 않는다.
예제#
iSQL> CREATE OR REPLACE PROCEDURE PROC1
AS
V1 CONNECT_TYPE;
V2 INTEGER;
BEGIN
V1 := UTL_TCP.OPEN_CONNECTION('127.0.0.1', 22007, NULL, NULL, 1024);
V2 := UTL_TCP.WRITE_RAW(V1, TO_RAW('MESSAGE'), RAW_SIZEOF('MESSAGE'));
UTL_TCP.CLOSE_CONNECTION(V1);
END;
/
IS_CONNECT#
접속 핸들의 연결 상태를 확인한다.
구문#
UTL_TCP.IS_CONNECT(c IN CONNECT_TYPE);
파라미터#
이름 | 입출력 | 데이터 타입 | 설명 |
---|---|---|---|
c | IN | CONNECT_TYPE | 접속 핸들 |
결과값#
성공적으로 수행할 경우 1을 반환한다. 실패한 경우 -1을 반환한다.
예외#
예외를 발생시키지 않는다.
예제#
iSQL> CREATE OR REPLACE PROCEDURE PROC1
AS
V1 CONNECT_TYPE;
V2 INTEGER;
BEGIN
V1 := UTL_TCP.OPEN_CONNECTION('127.0.0.1', 22007, NULL, NULL, 1000);
V2 := UTL_TCP.IS_CONNECT(V1);
IF V2 = 0 THEN
PRINTLN('CONNECTED');
V2 := UTL_TCP.WRITE_RAW(V1, TO_RAW('MESSAGE'), RAW_SIZEOF('MESSAGE'));
UTL_TCP.CLOSE_CONNECTION(V1);
ELSE
PRINTLN('NOT CONNECTD');
END IF;
END;
/
OPEN_CONNECTION#
원격 서버에 접속하기 위하여 소켓을 생성하고, 접속하는 프로시저이다.
구문#
UTL_TCP.OPEN_CONNECTION(
remote_host IN VARCHAR(64),
remote_port IN INTEGER,
local_host IN VARCHAR(64) DEFAULT NULL,
local_port IN INTEGER DEFAULT NULL,
in_buffer_size IN INTEGER DEF DEFAULT NULL,
out_buffer_size IN INTEGER DEF DEFAULT NULL,
charset IN VARCHAR(16) DEFAULT NULL,
newline IN VARCHAR(2) DEFAULT CRLF,
tx_timeout IN INTEGER DEF DEFAULT NULL,
wallet_path IN VARCHAR(256) DEFAULT NULL,
wallet_password IN VARCHAR DEFAULT NULL));
파라미터#
이름 | 입출력 | 데이터 타입 | 설명 |
---|---|---|---|
remote_host | IN | VARCHAR(64) | 원격 서버의 IP 주소 |
remote_port | IN | INTEGER | 원격 서버의 포트 번호 |
local_host | IN | VARCHAR(64) | 호환성을 위한 파라미터이며, 이 값은 무시된다. |
local_port | IN | INTEGER | 호환성을 위한 파라미터이며, 이 값은 무시된다. |
in_buffer_size | IN | INTEGER | 호환성을 위한 파라미터이며, 이 값은 무시된다. |
out_buffer_size | IN | INTEGER | 내부 송신 버퍼의 크기를 설정한다. 최솟값은 2048바이트, 최댓값은 32767바이트이다. Null 값은 최솟값으로 설정된다. |
charset | IN | VARCHAR(16) | 호환성을 위한 파라미터이며, 이 값은 무시된다. |
newline | IN | VARCHAR(2) | 호환성을 위한 파라미터이며, 이 값은 무시된다. |
tx_timeout | IN | INTEGER | 호환성을 위한 파라미터이며, 이 값은 무시된다. |
wallet_path | IN | VARCHAR(256) | 호환성을 위한 파라미터이며, 이 값은 무시된다. |
wallet_password | IN | VARCHAR | 호환성을 위한 파라미터이며, 이 값은 무시된다. |
결과값#
성공적으로 수행할 경우 CONNECT_TYPE인 접속 핸들을 반환한다.
예외#
네트워크의 접속 실패 등으로 예외가 발생하면, CONNECT_TYPE으로 NULL 값이 반환된다. UTL_TCP.IS_CONNECT() 함수를 이용하여 접속 핸들의 연결 상태를 확인할 수 있다.
예제#
iSQL> CREATE OR REPLACE PROCEDURE PROC1
AS
V1 CONNECT_TYPE;
V2 INTEGER;
BEGIN
V1 := UTL_TCP.OPEN_CONNECTION('127.0.0.1', 22007, NULL, NULL, 1024);
V2 := UTL_TCP.WRITE_RAW(V1, TO_RAW('MESSAGE'), RAW_SIZEOF('MESSAGE'));
UTL_TCP.CLOSE_CONNECTION(V1);
END;
/
WRITE_RAW#
입력된 RAW 타입의 데이터를 네트워크에 접속된 핸들이 원격 서버로 전송한다.
구문#
UTL_TCP.WRITE_RAW(
c IN CONNECT_TYPE,
data IN RAW(65534),
len IN INTEGER DEFAULT NULL);
파라미터#
이름 | 입출력 | 데이터 타입 | 설명 |
---|---|---|---|
c | IN | CONNECT_TYPE | 접속 핸들 |
data | IN | RAW(65534) | 전송하려는 데이터 |
len | IN | INTEGER | 전송하려는 데이터의 길이 |
결과값#
성공적으로 수행할 경우 네트워크로 전송한 데이터의 길이를 반환한다. 실패하면 -1을 반환한다.
예외#
접속 핸들의 연결이 유실되면, UTL_TCP.IS_CONNECT() 함수를 이용하여 접속 핸들의 상태를 확인할 수 있다.
예제#
iSQL> CREATE OR REPLACE PROCEDURE PROC1
AS
V1 CONNECT_TYPE;
V2 INTEGER;
BEGIN
V1 := UTL_TCP.OPEN_CONNECTION('127.0.0.1', 22007, NULL, NULL, 1024);
V2 := UTL_TCP.WRITE_RAW(V1, TO_RAW('MESSAGE'), RAW_SIZEOF('MESSAGE'));
UTL_TCP.CLOSE_CONNECTION(V1);
END;
/