Oracle 無即時輸出工具,DBMS_OUTPUT.PUT_LINE 需等程序結束才顯示,長批次程序除錯極不便。
Oracle 8i 引入 UTL_SMTP 套件 (需 JVM + plsql.jar),可直接從資料庫發送郵件,實現即時監控。
plsql.jar:LOADJAVA -user sys/pwd@db -resolve plsql/jlib/plsql.jar 或執行 @initplsj.sql。OPEN_CONNECTION 連線 SMTP Server (埠 25)。HELO 建立會話。MAIL 起始郵件交換。RCPT 指定收件者 (多次呼叫支援多收件)。DATA 發送郵件內容 (含標頭)。QUIT 結束會話。提供 SetSender/GetSender, SetRecipient/GetRecipient, SetCcRecipient, SetMailHost, SetSubject, 雙重載 Send:
Send(pSender, pRecipient, pMailHost, pCc, pSubject, pMessage) 完整參數版。Send(pMessage) 除錯簡易版 (使用 Session 級預設值)。郵件內容手動格式化 (Date, From, Subject, To),超過 2000 字元需用 OPEN_DATA/WRITE_DATA/CLOSE_DATA 分段發送。
BEGIN
EmailUtils.SetSender('WayneZ@MyCompany.com');
EmailUtils.SetRecipient('waynezheng@vip.sina.com');
EmailUtils.SetMailHost('MyServer.MyCompany.com');
EmailUtils.SetSubject('DeleteClassifications Run 1');
END;
/
-- 程式碼中插入即時回報
vMessage := 'Point 1.' || UTL_TCP.CRLF || 'Rows: ' || vRows || ' Time: ' || vTime;
EmailUtils.Send(vMessage);