如何使用 Oracle 数据库实现实时通信
由于 Oracle 不提供用于实时输出消息的工具, Oracle 数据库开发者总是要面临实时
监视他们的储备过程执行的挑战。他们必须使用 dbms_output.put_line 调用,这个调用
直到过程完成才返回结果。
在本文中,我想演示如何从 Oracle8i 数据库直接发送电子邮件,作为一种实时通信
解决方案。这样我们要监视存储过程就不再需要等待它们完成了,这样的方法还为开发者
提供了其他的一些好处:
. 可以在几分钟内调试一些很长的批处理过程,而不需要等几个小时;
. 计算用于指定代码块所需的执行时间。
这就需要解决一个问题,我们如何从运行的存储过程中输出消息以便我们可以即时检
查它 们,即使我们不在办公场所?我们的做法是把所有必需的过程与函数包装在自定义的
包中,然后使用 Oracle8i UTL_SMTP 包直接地从 Oracle 数据库中发送电子邮件。下面
我将详细讲解一些这个过程。
Oracle 的 UTL_SMTP 包
在 Oracle8i 中引入了 UTL_SMTP 包(SMTP 代表 Simple Mail Transfer Protocol
简单邮件传送协议,使用 TCP 端口 25 在客户机和服务器之间建立通信联络),使开发者能
够从数据库发送电子邮件。
只有安装带有 Java 虚拟机(JVM)的 8i 或更高的版本才能使用 UTL_SMTP。 此外还必
须把 plsql.jar 载入数据库中。否则,当调用 UTL_SMTP API 来发送电子邮件的时候我们
将得到下面的异常:ORA - 29540 : class oracle/plsql/net/TCPConnection does not
exist。
默认的$ ORACLE_HOME/javavm/install/initjvm.sql 脚本(安装了 JVM)不运行
把 plsql.jar 载入数据库的 initplsj.sql 脚本。系统用户或者内部用户可以手工运行
$ORACLE_HOME/RDBMS/ADMIN/initplsj.sql 脚本以解 决这个问题。 如果你没有可用
的脚本,你要么可以从 Oracle 支持那里得到它,要么可以简单地直接使用 loadjava 载入
实用程序 plsql.jar:
loadjava -user sys/password@database -resolve
plsql/jlib/plsql.jar
UTL_SMTP API:
本文的代码中使用了下列 UTL_SMTP 包中的 API:
OPEN_CONNECTION():打开到简单邮件传送协议服务器的连接。