【IT168 服务器学院】通过在存储过程中调用此存储过程来监控存储过程中所产生的错误,以便尽快解决。
CREATE OR REPLACE
PROCEDURE send_mail (
p_recipient IN VARCHAR2,
p_message IN VARCHAR2,
p_subject IN VARCHAR2 DEFAULT ''Oracle Perf Report ''
|| TO_CHAR (SYSDATE,
''yyyy-mm-dd hh24:mi:ss''
),
p_sender IN VARCHAR2 DEFAULT ''test@sina.com''
)
IS
v_mailhost VARCHAR2 (30) := ''test.sina.com'';
--SMTP服务器地址
mail_conn UTL_SMTP.connection;
msg VARCHAR2 (4000);
p_user VARCHAR2 (30) := ''test@sina.com'';
--登录SMTP服务器的用户名
p_pass VARCHAR2 (30) := ''test''; --登录SMTP服务器的密码
BEGIN
/* 创建要发送的邮件内容 注意报头信息和邮件正文之间要空一行 */
msg :=
''Date:''
|| TO_CHAR (SYSDATE, ''dd mon yy hh24:mi:ss'')
|| UTL_TCP.crlf
|| ''From: ''
|| p_sender
|| ''<''
|| p_sender
|| ''>''
|| UTL_TCP.crlf
|| ''To: ''
|| p_recipient
|| ''<''
|| p_recipient
|| ''>''
|| UTL_TCP.crlf
|| ''Subject: ''
|| p_subject
|| UTL_TCP.crlf
|| UTL_TCP.crlf
|| p_message;
-- dbms_output.put_line(msg);
mail_conn := UTL_SMTP.open_connection (v_mailhost, 25);
UTL_SMTP.helo (mail_conn, v_mailhost);
/* smtp服务器登录校验 */
UTL_SMTP.command (mail_conn, ''AUTH LOGIN'');
UTL_SMTP.command
(mail_conn,
UTL_RAW.cast_to_varchar2
(UTL_ENCODE.base64_encode (UTL_RAW.cast_to_raw (p_user)
)
)
);
UTL_SMTP.command
(mail_conn,
UTL_RAW.cast_to_varchar2
(UTL_ENCODE.base64_encode (UTL_RAW.cast_to_raw (p_pass)
)
)
);
UTL_SMTP.mail (mail_conn, p_sender);
UTL_SMTP.rcpt (mail_conn, p_recipient);
/* 发送数据 */
UTL_SMTP.DATA (mail_conn, msg);
UTL_SMTP.quit (mail_conn);
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (DBMS_UTILITY.format_error_stack);
DBMS_OUTPUT.put_line (DBMS_UTILITY.format_call_stack);
NULL;
END send_mail;