由Oracle PL/SQL中寄信
我有時候會使用Oracle的PL/SQL來寫一些程序,可以提供給前端的程式來叫用,或者使用Oracle的排程器來叫用,就可以做到許多原本要用C#或PB等開發工具才能做到的事。PL/SQL可以提供很好的效能,配合SQL Developer工具就可以跨平台在Windows或Mac OSX,Linux等不同電腦上寫程式。 最近在寫一個定期檢查的功能,想要在程式檢查到某些特別狀況時,希望可以寄送信件通知。找了一些資料,先稍作整理: 1. PL/SQL寄email的方式由早期的UTL_TCP,UTL_SMTP,到10g之後主要是推UTL_MAIL, 但是UTL_MAIL預設沒有安裝,必須由DBA先行安裝並設定一個指定郵件主機的初始參數。 $cd $ORACLE_HOME/rdbms/admin $sqlplus / as sysdba > @ utlmail.sql > @ prvtmail.plb > grant execute on UTL_MAIL to public; > alter system set smtp_out_server='xxx.xxx.xxx.xxx' 然後就可以很簡單的叫用一個程序來寄信了。 utl_mail.send(sender, recipients, cc, bcc, subject, message, mine_type); 我直接在SQL Developer裡測試正常,但是將此程式包在另一個程序裡叫用時,卻出現ORA-24247的錯誤。Google了一下找到這篇 ORA-06502 ORA-24247 calling UTL_MAIL from Oracle 11gR2 說要再建立一個ACL,然後要利用此ACL指派權限可以存取該郵件主機。不過,我在建立ACL時,卻又出現另一個錯誤訊息:function-based index XDB.XDB$ACL_XIDX is disabled並告訴我可以重建或啟用該索引。我直接在SQL Developer中重建該索引,卻一直失敗。再去Google後找到另一篇 Fine-grained access to network services ,發現他也是同樣的情況,而且他說他重建索引後就可以了。我才想到自己雖然具有DBA的權限,但是...