首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 8i 利用 UTL_SMTP 實現即時通訊與程序除錯

     編輯:Oracle 資料庫基礎

痛點

Oracle 無即時輸出工具,DBMS_OUTPUT.PUT_LINE 需等程序結束才顯示,長批次程序除錯極不便。

解決方案:UTL_SMTP 發送 Email

Oracle 8i 引入 UTL_SMTP 套件 (需 JVM + plsql.jar),可直接從資料庫發送郵件,實現即時監控。

前置設定

  • 安裝 JVM 選項。
  • 載入 plsql.jar:LOADJAVA -user sys/pwd@db -resolve plsql/jlib/plsql.jar 或執行 @initplsj.sql。

UTL_SMTP 核心 API 流程

  1. OPEN_CONNECTION 連線 SMTP Server (埠 25)。
  2. HELO 建立會話。
  3. MAIL 起始郵件交換。
  4. RCPT 指定收件者 (多次呼叫支援多收件)。
  5. DATA 發送郵件內容 (含標頭)。
  6. QUIT 結束會話。

封裝 EmailUtils Package

提供 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);

優於 DBMS_OUTPUT 的優勢

  • 即時接收,無需等待程序結束 (長跑程序 5-10 分鐘即可發現問題)。
  • 無 255 位元組/行限制。
  • 支援 Boolean 型別。
  • 遠端監控、資料匯出 (收信後貼入 Excel) 皆宜。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved