콘텐츠로 이동

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;
    /