我們被迫使用PL/SQL的mailx命令發送郵件 acutally我有我的通用腳本,但我不知道如何直接在PL/SQL代碼執行Shell命令從PL/SQL發送郵件
我們的代碼是
(echo "$mailbody" uuencode $ZIP_FILE $ZIP_FILE) | mailx -m -s "subject" -r " " "$mail_to_address"
我們被迫使用PL/SQL的mailx命令發送郵件 acutally我有我的通用腳本,但我不知道如何直接在PL/SQL代碼執行Shell命令從PL/SQL發送郵件
我們的代碼是
(echo "$mailbody" uuencode $ZIP_FILE $ZIP_FILE) | mailx -m -s "subject" -r " " "$mail_to_address"
很明顯,你已經解釋說,Oracle已經內置支持通過UTL_MAIL和不使用你的組織已經支付了:)
功能是有勇無謀「我不知道如何直接在PL/SQL代碼執行」
您不能運行OS直接從PL/SQL命令。然而...
由於Oracle 10g,DBMS_SCHEDULER允許我們調用主機程序。 CREATE_PROGRAM()
其中program_type => 'EXECUTABLE'
。如果您希望有一個後臺作業輪詢通知,然後發送批量電子郵件,則調度程序方法將是最佳方法。坦率地說,DBMS_SCHEDULER的最佳介紹是Tim Hall's articles on Oracle-Base。
但是,如果您需要按需執行調用,那麼您需要的方法是Java存儲過程,它使用Java Command
對象來運行主機調用。這可能會帶來政治問題,因爲一些DBA對Java存在懷疑,但它受到支持。這是an Oracle White Paper which explains how to go about it。
您可以從PL/SQL過程發送電子郵件,而無需調用諸如mailx之類的操作系統命令。一些例子在這裏:從其中一個例子
http://www.orafaq.com/wiki/Send_mail_from_PL/SQL
示例代碼:
DECLARE
v_From VARCHAR2(80) := '[email protected]';
v_Recipient VARCHAR2(80) := '[email protected]';
v_Subject VARCHAR2(80) := 'test subject';
v_Mail_Host VARCHAR2(30) := 'mail.mycompany.com';
v_Mail_Conn utl_smtp.Connection;
crlf VARCHAR2(2) := chr(13)||chr(10);
BEGIN
v_Mail_Conn := utl_smtp.Open_Connection(v_Mail_Host, 25);
utl_smtp.Helo(v_Mail_Conn, v_Mail_Host);
utl_smtp.Mail(v_Mail_Conn, v_From);
utl_smtp.Rcpt(v_Mail_Conn, v_Recipient);
utl_smtp.Data(v_Mail_Conn,
'Date: ' || to_char(sysdate, 'Dy, DD Mon YYYY hh24:mi:ss') || crlf ||
'From: ' || v_From || crlf ||
'Subject: '|| v_Subject || crlf ||
'To: ' || v_Recipient || crlf ||
crlf ||
'some message text'|| crlf || -- Message body
'more message text'|| crlf
);
utl_smtp.Quit(v_mail_conn);
EXCEPTION
WHEN utl_smtp.Transient_Error OR utl_smtp.Permanent_Error then
raise_application_error(-20000, 'Unable to send mail', TRUE);
END;
/
感謝您的輸入..但沒有我的組織批准,正在與UT_FILE測試,但日本文字記錄器被損壞,附件也不會。任何方式讓我嘗試這個dbms_scheduler選項 –