내용 목차
본 장에서는 UTL_TCP 패키지의 기본 개념과 패키지 내의 프러시저와 함수를 사용하는 방법을 설명한다.
UTL_TCP은 TCP/IP 클라이언트 역할을 수행할 수 있는 프러시저 및 함수들을 제공하는 패키지이다.
많은 인터넷 환경이 TCP/IP 프로토콜에 기반하므로, 이메일이나 인터넷 연결 등에 유용하게 사용될 수 있다.
본 절에서는 UTL_TCP 패키지에 제공하는 별도 정의된 타입들을 알파벳 순으로 설명한다.
UTL_TCP를 이용한 TCP/IP 연결의 객체 및 연결 정보를 담고 있는 레코드 타입이다.
프로토타입
TYPE CONNECTION IS RECORD ( pvid PLS_INTEGER, remote_host VARCHAR2(255), remote_port PLS_INTEGER, tx_timeout PLS_INTEGER );
필드
필드 이름 | 설명 |
---|---|
pvid | TCP/IP의 연결 객체를 지칭하는 ID이다. 변경하지 않도록 한다. |
remote_host | 연결된 TCP 서버의 주소이다. |
remote_port | 연결된 TCP 서버의 포트 번호이다. |
tx_timeout | TCP 통신을 이용한 읽기/쓰기의 시간 제한으로, 제한 시간이 지나면 타임아웃 에러와 함께 반환한다. (단위: 초)
|
본 절에서는 UTL_TCP 패키지에서 제공하는 프러시저와 함수를 알파벳 순으로 설명한다.
연결 중인 TCP/IP 연결을 끊는 프러시저이다.
CLOSE_CONNECTION 프러시저의 세부 내용은 다음과 같다.
프로토타입
UTL_TCP.CLOSE_CONNECTION ( c IN OUT NOCOPY connection );
파라미터
파라미터 | 설명 |
---|---|
c | 기존에 연결된 연결 객체이다. 타입은 UTL_TCP.CONNECTION이다. |
예제
DECLARE c UTL_TCP.CONNECTION; BEGIN c := UTL_TCP.OPEN_CONNECTION('localhost', 25); UTL_TCP.CLOSE_CONNECTION(c); END;
원격 TCP 서버로부터 받은 문자열 한 줄을 가져오는 함수이다. 자세한 내용은 동일한 기능을 수행하는 READ_LINE 함수의 설명을 참고한다.
프로토타입
UTL_TCP.GET_LINE ( c IN OUT NOCOPY connection, remove_crlf IN BOOLEAN DEFAULT FALSE, peek IN BOOLEAN DEFAULT FALSE ) RETURN VARCHAR2;
파라미터
파라미터 | 설명 |
---|---|
c | 기존에 연결된 연결 객체이다. 타입은 UTL_TCP.CONNECTION이다. |
remove_crlf | TRUE일 경우 문자열에 포함된 CR/LF 문자열을 제거하여 반환한다. |
peek | TRUE일 경우 TCP input queue로부터 읽어온 데이터를 비우지 않고 보존하여 이후 다시 읽어올 경우 같은 데이터를 읽게 된다. |
반환값
읽어들인 문자열이다.
예제
DECLARE c UTL_TCP.CONNECTION; data VARCHAR2(100); BEGIN c := UTL_TCP.OPEN_CONNECTION('localhost', 80); data := UTL_TCP.GET_LINE(c); END;
원격 TCP 서버로부터 받은 바이너리 데이터를 가져오는 함수이다. 자세한 내용은 동일한 기능을 수행하는 READ_RAW 함수의 설명을 참고한다.
프로토타입
UTL_TCP.GET_RAW ( c IN OUT NOCOPY connection, len IN PLS_INTEGER DEFAULT 1, peek IN BOOLEAN DEFAULT FALSE ) RETURN RAW;
파라미터
파라미터 | 설명 |
---|---|
c | 기존에 연결된 연결 객체이다. 타입은 UTL_TCP.CONNECTION이다. |
len | 읽어올 바이너리 데이터의 Byte 개수이다. (기본값: 1) |
peek | TRUE일 경우 TCP input queue로부터 읽어온 데이터를 비우지 않고 보존하여 이후 다시 읽어올 경우 같은 데이터를 읽게 된다. |
반환값
읽어들인 바이너리 데이터이다.
예제
DECLARE c UTL_TCP.CONNECTION; data RAW(100); BEGIN c := UTL_TCP.OPEN_CONNECTION('localhost', 80); data := UTL_TCP.GET_RAW(c, 10); -- 10Byte의 문자열을 읽어올 것을 요청 END;
원격 TCP 서버로부터 받은 문자열을 가져오는 함수이다. 자세한 내용은 동일한 기능을 수행하는 READ_TEXT 함수의 설명을 참고한다.
프로토타입
UTL_TCP.GET_TEXT ( c IN OUT NOCOPY connection, len IN PLS_INTEGER DEFAULT 1, peek IN BOOLEAN DEFAULT FALSE ) RETURN VARCHAR2
파라미터
파라미터 | 설명 |
---|---|
c | 기존에 연결된 연결 객체이다. 타입은 UTL_TCP.CONNECTION이다. |
len | 읽어올 문자열의 Byte 개수이다. (기본값: 1) |
peek | TRUE일 경우 TCP input queue로부터 읽어온 데이터를 비우지 않고 보존하여 이후 다시 읽어올 경우 같은 데이터를 읽게 된다. |
반환값
읽어들인 문자열이다.
예제
DECLARE c UTL_TCP.CONNECTION; data VARCHAR2(100); BEGIN c := UTL_TCP.OPEN_CONNECTION('localhost', 80); data := UTL_TCP.GET_TEXT(c, 10); -- 10Byte의 문자열을 읽어올 것을 요청 END;
외부 TCP 서버로의 TCP/IP 연결을 맺는 프러시저이다.
OPEN_CONNECTION 프러시저의 세부 내용은 다음과 같다.
프로토타입
UTL_TCP.OPEN_CONNECTION ( remote_host IN VARCHAR2, remote_port IN PLS_INTEGER, tx_timeout IN PLS_INTEGER DEFAULT NULL ) RETURN UTL_TCP.CONNECTION;
파라미터
파라미터 | 설명 |
---|---|
remote_host | 연결할 TCP 서버의 주소 이름이다. NULL이면 localhost로 자동 설정된다. |
remote_port | 연결할 TCP 서버의 포트 번호이다. |
tx_timeout | TCP 통신을 이용한 읽기/쓰기의 시간 제한으로, 제한 시간이 지나면 타임아웃 에러와 함께 반환한다. (단위: 초)
|
반환값
TCP/IP 연결 정보를 갖는 UTL_TCP.CONNECTION 타입의 객체이다.
예제
DECLARE c UTL_TCP.CONNECTION; BEGIN c := UTL_TCP.OPEN_CONNECTION('localhost', 25); END;
원격 TCP 서버로부터 받은 문자열 한 줄을 가져오는 함수이다.
타임아웃이 설정된 경우 타임아웃 시간까지 기다렸다가 만료되었을 때 TRANSFER_TIMEOUT 예외를 발생시킨다. 타임아웃이 NULL일 경우에는 무한정 기다리므로 주의하여 사용하도록 한다.
프로토타입
UTL_TCP.READ_LINE ( c IN OUT NOCOPY connection, data IN OUT NOCOPY VARCHAR2, remove_crlf IN BOOLEAN DEFAULT FALSE, peek IN BOOLEAN DEFAULT FALSE ) RETURN PLS_INTEGER;
파라미터
파라미터 | 설명 |
---|---|
c | 기존에 연결된 연결 객체이다. 타입은 UTL_TCP.CONNECTION이다. |
data | 읽어들인 문자열이다. |
remove_crlf | TRUE일 경우 문자열에 포함된 CR/LF 문자열을 제거하여 반환한다. |
peek | TRUE일 경우 TCP input queue로부터 읽어온 데이터를 비우지 않고 보존하여 이후 다시 읽어올 경우 같은 데이터를 읽게 된다. |
반환값
읽어들인 문자열의 문자 개수이다.
예제
DECLARE c UTL_TCP.CONNECTION; data VARCHAR2(100); len PLS_INTEGER; BEGIN c := UTL_TCP.OPEN_CONNECTION('localhost', 80); len := UTL_TCP.READ_LINE(c, data); END;
원격 TCP 서버로부터 받은 바이너리 데이터를 가져오는 함수이다.
타임아웃이 설정된 경우 타임아웃 시간까지 기다렸다가 만료되었을 때 TRANSFER_TIMEOUT 예외를 발생시킨다. 타임아웃이 NULL일 경우에는 무한정 기다리므로 주의하여 사용하도록 한다.
프로토타입
UTL_TCP.READ_RAW ( c IN OUT NOCOPY connection, data IN OUT NOCOPY RAW, len IN PLS_INTEGER DEFAULT 1, peek IN BOOLEAN DEFAULT FALSE ) RETURN PLS_INTEGER;
파라미터
파라미터 | 설명 |
---|---|
c | 기존에 연결된 연결 객체이다. 타입은 UTL_TCP.CONNECTION이다. |
data | 읽어들인 문자열이다. |
len | 읽어올 바이너리 데이터의 Byte 개수이다. |
peek | TRUE일 경우 TCP input queue로부터 읽어온 데이터를 비우지 않고 보존하여 이후 다시 읽어올 경우 같은 데이터를 읽게 된다. |
반환값
읽어들인 데이터의 Byte 개수이다.
예제
DECLARE c UTL_TCP.CONNECTION; data RAW(100); len PLS_INTEGER; BEGIN c := UTL_TCP.OPEN_CONNECTION('localhost', 80); len := UTL_TCP.READ_RAW(c, data, 10); END;
원격 TCP 서버로부터 받은 문자열을 가져오는 함수이다.
타임아웃이 설정된 경우 타임아웃 시간까지 기다렸다가 만료되었을 때 TRANSFER_TIMEOUT 예외를 발생시킨다. 타임아웃이 NULL일 경우에는 무한정 기다리므로 주의하여 사용하도록 한다.
프로토타입
UTL_TCP.READ_TEXT ( c IN OUT NOCOPY connection, data IN OUT NOCOPY VARCHAR2, len IN PLS_INTEGER DEFAULT 1, peek IN BOOLEAN DEFAULT FALSE ) RETURN PLS_INTEGER;
파라미터
파라미터 | 설명 |
---|---|
c | 기존에 연결된 연결 객체이다. 타입은 UTL_TCP.CONNECTION이다. |
data | 읽어들인 문자열이다. |
len | 읽어올 문자열의 문자 개수이다. |
peek | TRUE일 경우 TCP input queue로부터 읽어온 데이터를 비우지 않고 보존하여 이후 다시 읽어올 경우 같은 데이터를 읽게 된다. |
반환값
읽어들인 데이터의 Byte 개수이다.
예제
DECLARE c UTL_TCP.CONNECTION; data VARCHAR2(100); len PLS_INTEGER; BEGIN c := UTL_TCP.OPEN_CONNECTION('localhost', 80); len := UTL_TCP.READ_TEXT(c, data, 10); END;
원격 TCP 서버로 한줄의 문자열을 전송하는 함수이다. 입력문자열 뒤에 새줄 문자열이 붙어서 전송된다.
프로토타입
UTL_TCP.WRITE_LINE ( c IN OUT NOCOPY connection, data IN VARCHAR2 DEFAULT NULL ) RETURN PLS_INTEGER;
파라미터
파라미터 | 설명 |
---|---|
c | 기존에 연결된 연결 객체이다. 타입은 UTL_TCP.CONNECTION이다. |
data | 전송할 문자열이다. |
반환값
실제 전송된 데이터의 문자열 개수이다.
예제
DECLARE c UTL_TCP.CONNECTION; rc INTEGER; BEGIN c := UTL_TCP.OPEN_CONNECTION('localhost', 80); rc := UTL_TCP.WRITE_LINE(c, 'GET / HTTP/1.0'); END;
원격 TCP 서버로 바이너리 형태의 데이터를 보내는 함수이다.
프로토타입
UTL_TCP.WRITE_RAW ( c IN OUT NOCOPY connection, data IN RAW, len IN PLS_INTEGER DEFAULT NULL ) RETURN PLS_INTEGER;
파라미터
파라미터 | 설명 |
---|---|
c | 기존에 연결된 연결 객체이다. 타입은 UTL_TCP.CONNECTION이다. |
data | 전송할 바이너리 데이터이다. |
len | 전송할 바이너리 데이터의 Byte 수이다. NULL이면 데이터 전체를 전송한다. |
반환값
실제 전송된 데이터의 Byte 수이다.
예제
DECLARE c UTL_TCP.CONNECTION; rc INTEGER; BEGIN c := UTL_TCP.OPEN_CONNECTION('localhost', 80); rc := UTL_TCP.WRITE_RAW(c, '0D0A'); -- 0d 0a의 hex값을 가진 바이너리 데이터 전송 END;
원격 TCP 서버로 문자열 형태의 데이터를 보내는 함수이다.
프로토타입
UTL_TCP.WRITE_TEXT ( c IN OUT NOCOPY connection, data IN VARCHAR2, len IN PLS_INTEGER DEFAULT NULL ) RETURN PLS_INTEGER;
파라미터
파라미터 | 설명 |
---|---|
c | 기존에 연결된 연결 객체이다. 타입은 UTL_TCP.CONNECTION이다. |
data | 전송할 문자열 데이터이다. |
len | 전송할 문자열의 문자 개수이다. NULL이면 문자열 전체를 전송한다. |
반환값
실제 전송된 문자열의 문자 개수이다.
예제
DECLARE c UTL_TCP.CONNECTION; rc INTEGER; BEGIN c := UTL_TCP.OPEN_CONNECTION('localhost', 8080); rc := UTL_TCP.WRITE_TEXT(c, 'TIBEROTMAX', 6); -- TIBEROTMAX 문자열 중 TIBERO 문자열만 전송한다. END;