2013-02-08 2 views
0

오라클 11g 데이터베이스를 통해 소켓을 통해 외부 디스플레이 장치에 문자열을 보내고 싶습니다. 문자 또는 문자열이 먼저 16 진수로 변환되어야하고 문자열 끝에 체크섬이 있어야한다는 것을 모았습니다 (전송할 문자열을 확인하기 위해) addead가 될 것입니다.소켓 연결

누구나 소켓 연결을 열 수 있고 문자열을 보낼 수있는 방법을 말해 줄 수 있습니까?

답변

0

이론적으로 자바 저장 프로 시저를 사용하여이를 달성 할 수있는 감사 - 당신이 허용하는 경우 자신이 오라클 JVM에서 TCP 소켓을 열 PRIV. 그러나 이렇게하면 트랜잭션 결과 (커밋 또는 롤백)에 관계없이 데이터가 전송됩니다. 더 나은 솔루션은 이러한 문자열을 일부 큐 테이블에 저장 한 다음 외부 프로세스를 사용하여 철회하는 것입니다.

DBMS_PIPE를 사용할 수도 있습니다.

2
DECLARE 
    bt_conn  UTL_TCP.connection; 
    retval  BINARY_INTEGER; 
    l_sequence VARCHAR2 (50) := '@0100010303000118000201001401000201'; --string to be sent 
BEGIN 
    bt_conn := 
     UTL_TCP.open_connection (remote_host => '127.0.0.1', --IP of socket to be opened 
           remote_port => 26665, -- port number of socket 
           tx_timeout => 15); 
    DBMS_LOCK.SLEEP(1); -- this is to ensure a slight pause once opening the connection before --sending the string 
    retval := UTL_TCP.write_line (bt_conn, l_sequence); 
    UTL_TCP.flush (bt_conn); 
    UTL_TCP.close_connection (bt_conn); 
EXCEPTION 
    WHEN OTHERS 
    THEN 
     raise_application_error (-20101, SQLERRM); 
     UTL_TCP.close_connection (bt_conn); 
end;