大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
存储过程不能发邮件,邮件可以通过向表内插入数据,然后通过数据再调动外部程序进行发送。oracle内部程序本身没有发送邮件的功能。 现在一般是建立外部流程发邮件。
创新互联建站专注为客户提供全方位的互联网综合服务,包含不限于做网站、成都做网站、琼结网络推广、微信小程序开发、琼结网络营销、琼结企业策划、琼结品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联建站为所有大学生创业者提供琼结建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com
你这种情况最合适用事件驱动类提醒服务,了解一下:喵提醒,通过一个http请求就可以给你发手机信息,支持传参,还支持短信和语音电话。
分两步做,
1.oracle 当表中数据发生变化insert或者update
这个需要触发器的,但是触发器的作用也无非是数据库层面的操作,这样最好触发添加一条记录到邮件通知表,这个表加个状态state=0
2.用程序轮训定时扫描这个邮件通知表,周期可以设置为30秒扫描一次,扫描到的记录,进行邮件发送以及这个表记录的状态修改为state=1
一般不建议数据库服务器直接与外部连接。建议用第三方软件,比如easysqlmail之类的。第一,安全,第二,简单。自己集中精力把sql写好就可以了。望采纳。
Oracle 提供了一个SendMail的套件: utl_smtp.
可以利用utl_smtp来在PL/SQL发送邮件。
utl_smtp相关函数以及用法如下所示。
declare
mailhost VARCHAR2(50) := 'XXX.XXX.com';
mail_conn utl_smtp.connection; --定义
begin
-- 开启 Mail Connection
mail_conn := utl_smtp.open_connection(mailhost);
-- 建立连接
utl_smtp.helo(mail_conn, mailhost);
-- 设定发件者
utl_smtp.mail(mail_conn, 'yun@xxx.com');
-- 设定收件者
utl_smtp.rcpt(mail_conn, 'feng@xxx.com');
-- 设定邮件内容
utl_smtp.data(mail_conn, 'Subject:Oracle Send Mail Test' || utl_tcp.CRLF ||
'To:feng@xxx.com' || utl_tcp.CRLF ||
'Cc:lei@xxx.com' || utl_tcp.CRLF ||
'Hello World!'
);
-- 关闭连接
utl_smtp.quit(mail_conn);
在 Oracle 的运维过程中,常常需要监控任务执行情况,这时候如果用 Java 或 Python 都可以自定义一个发邮件提醒的功能,但如果能调用 Oracle 自带的的一些包来实现邮件提醒,不仅调用方便,而且提醒的灵活度更高(可以插在存储过程的任意一个犄角旮旯里)。
这里有两篇文章,详细介绍了调用 Oracle 系统包实现邮件提醒功能的两种方法:
我在使用这两个包的时候,遇到了“ORA-24247: 网络访问被访问控制列表 (ACL) 拒绝”的报错。我先检查了用户权限,然后检查了邮件服务器的端口权限,都没问题,于是在网络上搜索答案,原来真的报错提示很明显,就是 ACL 权限问题,不是其他。
于是参照 ORA-24247: 网络访问被访问控制列表 (ACL) 拒绝 这篇文章中的方法重新设置,一调试,果然可以正常发邮件了。