使用Oracle来实现实时通信的过程Oracle认证考试

文章作者 100test 发表时间 2009:07:25 10:40:48
来源 100Test.Com百考试题网


"tb42" class="mar10">   由于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.
  /

相关文章


学习Oracle认证的一些心得技巧Oracle认证考试
Oracle认证的专家之见(一)Oracle认证考试
为什么要参加OCP?Oracle认证考试
如何把文本文件导入oracleOracle认证考试
使用Oracle来实现实时通信的过程Oracle认证考试
OracleLogMiner学习和使用Oracle认证考试
Oracle错误:ORA6544Oracle认证考试
重定位数据文件的位置Oracle认证考试
控制文件备份关键是选择备份时机Oracle认证考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛