您的位置:软件 > 开发者网络 > 开发工具 > 开发专栏 > 数据库 > 正文
使用Oracle实现实时通信
[文章信息]
作者:合肥小雨
时间:2003-03-10
出处:yesky
责任编辑:方舟
[文章导读]
由于Oracle不提供用于实时输出消息的工具, Oracle数据库开发者总是要面临实时监视他们的储备过程执行的挑战
advertisement
热点推荐
· 11.15软件精选 制作MSI文件
· 闪客五周年之闪客光荣榜
· 用Winamp“品尝”无限音乐
· 网络加、解密的技术应用
· 闪客五周年之闪客光荣榜:zoron
[正文]

1 2  下一页

  由于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);
function GetSender
return varchar2;

procedure SetRecipient(pRecipient in varchar2);
function GetRecipient
return varchar2;

procedure SetCcRecipient(pCcRecipient in varchar2);
function GetCcRecipient
return varchar2;

procedure SetMailHost(pMailHost in varchar2);
function GetMailHost
return varchar2;

procedure SetSubject(pSubject in varchar2);
function GetSubject
return varchar2;


procedure Send(pMessage in varchar2);

procedure Send(pSender in varchar2,
pRecipient in varchar2,
pMailHost in varchar2,
pCcRecipient in varchar2 := null,
pSubject in varchar2 := null,
pMessage in varchar2 := null);

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);


1 2  下一页

·"WAP天极之IT新闻资讯,50万元等你拿"    ·天极WAP之游戏狂图,50万元等你下载


发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容阅读排行榜
  • 11.15软件精选 制作MSI文件
  • 闪客五周年之闪客光荣榜
  • 兰欣推出我国第一款网络游戏专用音箱
  • 玩家发现117亡灵种族Bug
  • [配置推荐]极品HIFI配置
  • 东瀛美少女COSPLAY(55)
  • 用Winamp“品尝”无限音乐
  • 迷你型PStwo全面透析专题
  • Advertisement

    天极无线
    待机彩图    >>更多
    多彩动画    >>更多
    美妙和弦    >>更多
    天使在唱歌
    壁虎漫步
    PrettyBoy
    LoveLoveLove
    我是你的小小狗
    单身情歌
    十面埋伏
    祝酒歌
    回心转意
    波斯猫
    太委屈
    S.H.E
    潘玮柏
    M2M
    蔡依林
    阿牛
    林志炫
    陈弈迅
    刀郎
    黑龙
    S.H.E
    陶晶莹
    情人玫瑰坊
    音乐风云
    新片速递
    神秘测试
    都市约会
    ·天极彩信天天精彩
    ·图铃梦工厂下载无限!
    ·找寻童真,卡通专题
    ·夏日激情交友社区!
    ·星座运程,预测人生

    CSEEK搜索