使用Oracle实现实时通信

来根你的红塔山

来根你的红塔山

2016-01-29 14:49

使用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

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com)

  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包的规范:

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com)

create or replace package EmailUtils as

procedure SetSender(pSender in varchar2);
function GetSender

展开更多 50%)
分享

猜你喜欢

使用Oracle实现实时通信

电脑网络
使用Oracle实现实时通信

用VB实现实时曲线的绘制和保存

编程语言 网络编程
用VB实现实时曲线的绘制和保存

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

微软实时通信API多客户端通信实战(1)

编程语言 网络编程
微软实时通信API多客户端通信实战(1)

微软实时通信API多客户端通信实战(3)

编程语言 网络编程
微软实时通信API多客户端通信实战(3)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

使用多线程实现数据实时采集

编程语言 网络编程
使用多线程实现数据实时采集

微软实时通信API多客户端通信实战(2)

编程语言 网络编程
微软实时通信API多客户端通信实战(2)

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Flash矢量绘画实例

Flash矢量绘画实例

《全民打怪兽》鱼人王解析 强力防御战士

《全民打怪兽》鱼人王解析 强力防御战士
下拉加载更多内容 ↓