本文主要介绍了oracle通过UTL_TCP与外部程序进行通信的示例
外部服务端使用python3编写
import socket #网络编程需要用到socket模块
server = socket.socket() #创建一个用于监听连接的Socket对像(服务器端)
server.bind(('127.0.0.1', 8888)) #设置服务端的ip和端口号
server.listen() #开始监听
while True:
print('ready')
conn, addr = server.accept() #接受服务器端发出的消息和地址信息
while True:
c_info= conn.recv(1024) #将接受的消息存入到c_info变量中
if not c_info:
break
else:
print(c_info)
if c_info==b'nice to meet you!':
print('send msg')
conn, addr = server.accept()
conn.send(b'nice to meet you too!') #向客户端发出消息
break
conn.close() #关闭连接
server.close() #关闭服务端
数据库端程序
DECLARE
v_conn UTL_TCP.connection;
v_ret PLS_INTEGER:=0;
v_out VARCHAR2(100):='';
BEGIN
--创建连接
v_conn:=UTL_TCP.open_connection(remote_host => '127.0.0.1',
remote_port => '8888',
in_buffer_size => 32767,
out_buffer_size => 32767,
CHARSET => null,
newline => UTL_TCP.CRLF,
tx_timeout => 3);
--发送消息
v_ret:=UTL_TCP.write_text(v_conn,'nice to meet you!');
dbms_output.put_line('v_ret:='||v_ret);
dbms_output.put_line('v_conn_flag:='||utl_tcp.available(v_conn));
--接收消息
IF utl_tcp.available(v_conn) >0 AND v_ret>0 THEN
v_ret:=utl_tcp.read_text(v_conn,v_out,512);
END IF;
dbms_output.put_line('v_out:=='||v_out);
--关闭连接
utl_tcp.close_connection(v_conn);
END;
效果如下