Java Stored Procedure in Oracle
2012-06-05 11:52
288 查看
本文作出如下假设:
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,并编译到数据库。
2. 创建一个 SQL 函数引用这个 Java 方法
3. 在远程机器上启动一个 UDP 的接收程序检测来自数据库的包
自己编写
4. 在 Command Window 中测试这个方法
5. 检查是否收到来自 Oracle Java Stored Procedure 的消息
若接收到则表示成功。
否则调试失败原因。
可能存在的问题:
权限相关
解决方法:
根据提示添加相关权限
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 的消息
若接收到则表示成功。
否则调试失败原因。
可能存在的问题:
权限相关
解决方法:
根据提示添加相关权限
相关文章推荐
- Get Dataset from Stored Procedure in Oracle
- Java: Passing Array to Oracle Stored Procedure
- Creating a Stored Procedure or Function in an Oracle Database
- Oracle Java Stored Procedure + 包调用
- How to use Oracle 11g ODP.NET UDT in an Oracle Stored Procedure's Where clause
- How to use Oracle 11g ODP.NET UDT in an Oracle Stored Procedure's Where clause
- Oracle Java Stored Procedure + 包调用
- Java: Passing Array To Oracle Stored Procedure
- Testing/Running the stored procedure(has OUT params) in Oracle sqldeveloper or sqlplus
- How To Use a DataReader Against an Oracle Stored Procedure in Visual C# .NET
- centos 6 下安装oracle 报错 Error: Can't open display 和 Exception in thread "main" java.lang.NoClassDefFou
- charindex VS like in stored procedure on to improve the performance
- 静默安装Oracle 11g过程中提示:Exception in thread "main" java.lang.NoClassDefFoundError
- How to call an Oracle Stored Procedure that returns one or more REF CURSORS, using ADO from C++ How
- ORACLE语法-包(package)、存储过程(procedure)、游标(cursor)以及java对Result结果集的处理
- Oracle 10g java.lang.Exception: Exception in sending Request :: null
- How to call Oracle function or stored procedure using spring persistence framework?
- XPO – (Gary's post)Stored Procedure Support Coming in V2010 Vol 2 Part1
- 使用java程序创建oracle function 或者 procedure
- oracle_10g em登录提示:java.lang.Exception Exception in sending Request null