你這種情況最合適用事件驅(qū)動類提醒服務(wù),了解一下:喵提醒,通過一個http請求就可以給你發(fā)手機信息,支持傳參,還支持短信和語音電話。
十年的烏海海南網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整烏海海南建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“烏海海南網(wǎng)站設(shè)計”,“烏海海南網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。
在 Oracle 的運維過程中,常常需要監(jiān)控任務(wù)執(zhí)行情況,這時候如果用 Java 或 Python 都可以自定義一個發(fā)郵件提醒的功能,但如果能調(diào)用 Oracle 自帶的的一些包來實現(xiàn)郵件提醒,不僅調(diào)用方便,而且提醒的靈活度更高(可以插在存儲過程的任意一個犄角旮旯里)。
這里有兩篇文章,詳細介紹了調(diào)用 Oracle 系統(tǒng)包實現(xiàn)郵件提醒功能的兩種方法:
我在使用這兩個包的時候,遇到了“ORA-24247: 網(wǎng)絡(luò)訪問被訪問控制列表 (ACL) 拒絕”的報錯。我先檢查了用戶權(quán)限,然后檢查了郵件服務(wù)器的端口權(quán)限,都沒問題,于是在網(wǎng)絡(luò)上搜索答案,原來真的報錯提示很明顯,就是 ACL 權(quán)限問題,不是其他。
于是參照 ORA-24247: 網(wǎng)絡(luò)訪問被訪問控制列表 (ACL) 拒絕 這篇文章中的方法重新設(shè)置,一調(diào)試,果然可以正常發(fā)郵件了。
分兩步做,
1.oracle 當(dāng)表中數(shù)據(jù)發(fā)生變化insert或者update
這個需要觸發(fā)器的,但是觸發(fā)器的作用也無非是數(shù)據(jù)庫層面的操作,這樣最好觸發(fā)添加一條記錄到郵件通知表,這個表加個狀態(tài)state=0
2.用程序輪訓(xùn)定時掃描這個郵件通知表,周期可以設(shè)置為30秒掃描一次,掃描到的記錄,進行郵件發(fā)送以及這個表記錄的狀態(tài)修改為state=1
一般不建議數(shù)據(jù)庫服務(wù)器直接與外部連接。建議用第三方軟件,比如easysqlmail之類的。第一,安全,第二,簡單。自己集中精力把sql寫好就可以了。望采納。
存儲過程不能發(fā)郵件,郵件可以通過向表內(nèi)插入數(shù)據(jù),然后通過數(shù)據(jù)再調(diào)動外部程序進行發(fā)送。oracle內(nèi)部程序本身沒有發(fā)送郵件的功能。 現(xiàn)在一般是建立外部流程發(fā)郵件。
Oracle 提供了一個SendMail的套件: utl_smtp.
可以利用utl_smtp來在PL/SQL發(fā)送郵件。
utl_smtp相關(guān)函數(shù)以及用法如下所示。
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);
--?設(shè)定發(fā)件者
utl_smtp.mail(mail_conn,?'yun@xxx.com');
--?設(shè)定收件者
utl_smtp.rcpt(mail_conn,?'feng@xxx.com');
--?設(shè)定郵件內(nèi)容
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!'
);
--?關(guān)閉連接
utl_smtp.quit(mail_conn);