电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

使用utl


发布日期:2023/5/26
 

假如你目前运行的是Oracleg或更高的版本那么你现在就可以用新的utl_mail工具包从你的PL/SQL应用程序来发送电子邮件了(注释如果你的应用程序使构建在Oracle i的基础之上前提是运行维护在Oracle g或以上版本那么你也可以通过旧的utl_smtp工具包来发送电子邮件

utl_smtp代码的一个优点就是可以在Oracle g上正常运行所以我们不需要用utl_mail来替代utl_smtp工具包虽然utl_mail完全替代utl_smtp的一天勿庸置疑会降临不过现在utl_smtp还能够满足我们的需求

首先确认utl_smtp工具包已经安装在你的系统里(当然是在SYS架构里)如果你还没有安装这个工具包可以在你的ORACLE_HOME\RDBMS\admin文件夹中找到utlsmtpsql脚本你还需要utl_tcp包同样的如果你发现utl_tcp包还没有加载也可以从跟utlsmtpsql脚本相同的路径找到utltcpsql脚本最后你还需要知道你的企业SMTP服务器的URL(注意下面的例子不适用于对SMTP进行了安全设置的服务器如Gmail)

程序包说明语句

以下是引用片段

create or replace PACKAGE sendmail IS procedure send (p_sender varchar p_recipient varchar p_subject varchar p_body varchar default null); end sendmail;

仔细观察以上语句的主体和下面的程序包你可能会发现send的公共模式(public method)依赖于被称为common的私有模式(private method)这样以后我们可以对这个程序包进行扩展并为大家展示怎样发送二进制大对象(blob)附件例如如果你生成了一份PDF文档并把它保存在你的数据库里你可以会想要把它作为电子邮件的附件发送出去 common模式就是用来完成这个任务的将要用到的代码来自于基本send模式和send_blob模式

以下就是程序包的主体

以下是引用片段

create or replace PACKAGE BODY sendmail IS procedure common (p_sender varchar p_recipient varchar p_subject varchar c out nnection) is v_recipient varchar(); begin make connection to smtp c := utl_smtpopen_connection(); identify the domain of the sender utl_smtphelo(c ); start a mail specify the sender utl_smtpmail(c p_sender); identify recipient utl_smtprcpt(c v_recipient); start the mail body utl_smtpopen_data(c); utl_smtpwrite_data(c From: || p_sender || utl_tcpcrlf); utl_smtpwrite_data(c To: || p_recipient || utl_tcpcrlf); utl_smtpwrite_data(c Subject: || p_subject || utl_tcpcrlf); exception when utl_smtptransient_error or utl_smtppermanent_error then utl_smtpquit(c); raise; when others then raise; end common; procedure send (p_sender varchar p_recipient varchar p_subject varchar p_body varchar default null) is c nnection; begin common(p_sender p_recipient p_subject c); utl_smtpwrite_data(c ContentType: text/html || utl_tcpcrlf); utl_smtpwrite_data(c utl_tcpcrlf || p_body); utl_smtpclose_data(c); utl_smtpquit(c); exception when utl_smtptransient_error or utl_smtppermanent_error then utl_smtpquit(c); raise; when others then raise; end send; end sendmail;

上面的这个程序里有些地方是需要用具体的信息来替代的第一个是提供SMTP服务器的地方需要添加你自己要添加的任何企业STMP服务器

——make connection to smtp

c = utl_smtpopen_connection(

其次是需要验证域的地方需要用你的确切域名来替代

——identify the domain of the sender

utl_smtphelo(c

以上就是获取基本的电子邮件功能所需要的所有程序你可以通过以下的语句来调用此程序

下面是引用的实例片段

begin sendmailsend ( r Subject: Hello How about your trip?); end;

你可以发现上面在邮件的主体部分(body)的字符串嵌入了超文本编辑模式效果(字体为粗体)这是因为前面在send模式下将内容类型设置为text/html

utl_smtpwrite_data(c ContentType text/html || utl_tcpcrlf)

注意请不要把chr()作为换行符嵌入到带格式的电子邮件中发送出去因为HTML模式会把它忽略掉你可以使用break或段落标签来改变信息主体的格式

上一篇:适时增加Distinct提高查询效率

下一篇:ABOUT : 字符数组