本文作出如下假设:

1)Oracle 版本 11.2g

2)使用 PL/SQL Developer

3)Oracle 所在 IP 192.168.56.222

4)远程机器 IP 192.168.56.1

5)Java 存储过程使用本地 UDP 端口 7777

6)远程检测程序使用 UDP 端口 7778

 

完整步骤如下:

1. 用 PL/SQL 创建一个 Java Source 类 UDPSender,并编译到数据库。

create or replace and compile java source named UDPSender as
import java.net.*;

public class UDPSender
{
    // local IP address
    static final String LOCAL_IP_ADDR = "192.168.56.222";
   
    // remote IP address
    static final String REMOTE_IP_ADDR = "192.168.56.1";

    // UDP Socket Port
    static final int LOCAL_UDP_PORT = 7777;
   
    // UDP Socket Port
    static final int REMOTE_UDP_PORT = 7778;
   
    // Send UDP Message
    public static String send(String msg) {
        String retmsg = "UDPSender send msg: " + msg;
        DatagramSocket sock = null;

        try {
            retmsg += " -> Create a UDP socket.";
            sock = new DatagramSocket(
                LOCAL_UDP_PORT,
                InetAddress.getByName(LOCAL_IP_ADDR)
            );
           
            DatagramPacket p = new DatagramPacket(
                msg.getBytes(),
                msg.length(),
                InetAddress.getByName(REMOTE_IP_ADDR),
                REMOTE_UDP_PORT
            );

            sock.send(p);           
            retmsg += " -> Sent Ok.\n";
            sock.close();
        }
        catch (Exception e) {
            e.printStackTrace();
            retmsg += " -> Exception: " + e.toString();
        }
       
        return retmsg;
    }
}

 

2. 创建一个 SQL 函数引用这个 Java 方法

create or replace function fn_send_udp_message (msg in nvarchar2) return nvarchar2
   as language java name 'UDPSender.send(java.lang.String) return java.lang.String';
  

 

3. 在远程机器上启动一个 UDP 的接收程序检测来自数据库的包

自己编写

 

4. 在 Command Window 中测试这个方法

set serveroutput on size 10000
exec dbms_java.set_output(10000)
exec DBMS_OUTPUT.PUT_LINE(fn_send_udp_message('Hello ABC'));

 

5. 检查是否收到来自 Oracle Java Stored Procedure 的消息

若接收到则表示成功。

否则调试失败原因。

 

可能存在的问题:

权限相关

 

解决方法:

根据提示添加相关权限

posted on 2012-06-05 11:52  YUVU  阅读(751)  评论(0编辑  收藏  举报