利用Oracle实现及时通信[Oracle防范]
本文“利用Oracle实现及时通信[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():翻开到简单邮件传送协议服务器的衔接.
HELO():履行衔接之后成立与简单邮件传送协议服务器初始的收发关系功效,它能辨认发送到服务器的"信使".
MAIL():初始化与服务器的邮件交换,但是事实上不发送消息.
RCPT():辨认消息的承受者.为了把一条消息发送到多个承受者,你必须多次调用这个历程.
DATA():指定电子邮件的内容.
QUIT():终止一个SMTP会话并且断开与服务器的衔接.
为了操纵利用程序编程接口,把下面的调用按照给定的次序放入程序中:
调用 OPEN_CONNECTION
调用 HELO
调用 MAIL
调用 RCPT for each recipient
格局化电子邮件的内容然后调用MAIL
调用 QUIT
EmailUtils包标准
EmailUtils包包含下列API:
SetSender/GetSender-设置/获得发送者
SetRecipient/GetRecipient -设置/获得承受者
SetCcrecipient/GetCcrecipient -设置/获得抄件承受者
SetMailHost/GetMailHost -设置/获得邮件主机
SetSubject/GetSubject -设置/获得主题
Send-发送邮件
代码1阐明了EmailUtils包的标准:
create or replace package EmailUtils as procedure SetSender(pSender in varchar2); procedure SetRecipient(pRecipient in varchar2); procedure SetCcRecipient(pCcRecipient in varchar2); procedure SetMailHost(pMailHost in varchar2); procedure SetSubject(pSubject in varchar2);
procedure Send(pSender in varchar2, end EmailUtils; |
可以看出,Send历程是重载历程:包标准中包含这个历程的两个版本. 一个版本当至少三个强迫性参数要规定的时刻引用,pSender,pRecipient和pMailHost:
procedure Send(pSender in varchar2, pRecipient in varchar2, pMailHost in varchar2, pCcRecipient in varchar2 := null, pSubject in varchar2 := null, pMessage in varchar2 := null); |
以上是“利用Oracle实现及时通信[Oracle防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |