在oracle中有没有一种方法可以将数据从表导出到电子邮件?问题是,我有一个日志表,在那里我保存了失败的日志。我想有一个过程来检查前一天是否有任何日志,如果有,然后在电子邮件中发送它们。结果应该看起来像这样:
Log_id - Procedure_name - Fail_type - Message
Log_id - Procedure_name - Fail_type - Message
Log_id - Procedure_name - Fail_type - Message
Log_id - Procedure_name - Fail_type - Message
这是我现在的程序
PROCEDURE send_mail(v_recipient VARCHAR2
,v_subject VARCHAR2
,v_text VARCHAR2
,v_from VARCHAR2 DEFAULT 'hsdfafjh@jhh.jij') IS
v_mail_host VARCHAR2(30) := 'hgiugiuyg';
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 ||
v_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;
2条答案
按热度按时间ozxc1zmp1#
对于来自Oracle的任何邮件,我在PL/SQL程序包中使用以下通用过程:
它提供了一些额外功能:
From
和Subject
可以包含非ASCII字符,如öäü(当然邮件正文也可以)注意,不要错过空行
UTL_SMTP.WRITE_DATA(con, UTL_TCP.CRLF);
,它们是正确邮寄所必需的。然后,您可以使用如下所示的过程:
或者您可以将日志作为附件,如下所示:
如果附件以文件形式存在于您的服务器上,请使用以下函数将其转换为
BLOB/CLOB
:7kjnsjlb2#
你可以生成一个HTML脚本并将其添加到邮件中。就像你想要一个表格格式一样,你可以创建HTML脚本并将其附加到邮件中。
请参考以下内容
可以用表替换所需的数据。