oracle中如何将日志表数据导出到邮件正文

oracle中如何将日志表数据导出到邮件正文,oracle,email,Oracle,Email,oracle中有没有一种方法可以将数据从表导出到电子邮件? 问题是,我有一个日志表,在那里我保存失败的日志。我想有一个程序,检查是否有任何日志在前一天,如果是,然后发送他们在电子邮件消息。结果应该类似于: Log_id - Procedure_name - Fail_type - Message Log_id - Procedure_name - Fail_type - Message Log_id - Procedure_name - Fail_type - Message Log_id -

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;

您可以生成HTML脚本并将其添加到邮件中。 就像您想要表格格式一样,您可以创建HTML脚本并将其附加到邮件中

请参考以下内容

DECLARE
   p_message_body   CLOB                := EMPTY_CLOB ();
   p_smtp_host      VARCHAR2 (20)       := <SMTP_SERVER_IP>;
   p_smtp_port      VARCHAR2 (10)       := '25';
   p_message_type   VARCHAR2 (100)      := ' text/html';
   crlf             VARCHAR2 (2)        := UTL_TCP.crlf;
   ls_dt_start      VARCHAR2 (50);
   ls_dt_end        VARCHAR2 (50);
   l_mail_conn      UTL_SMTP.connection;
   pf_to_name       VARCHAR2 (100);
BEGIN
   BEGIN
      SELECT TO_CHAR (SYSDATE - 1, 'HH12:MI:SS AM'),
             TO_CHAR (SYSDATE + 1, 'HH12:MI:SS AM')
        INTO ls_dt_start,
             ls_dt_end
        FROM DUAL;
   EXCEPTION
      WHEN OTHERS
      THEN
         NULL;
   END;

   p_message_body :=
      '<HTML> <HEAD> <STYLE> table, th, td { border: 1px solid black; border-collapse: collapse; } </STYLE> </HEAD> ';
   p_message_body :=
         p_message_body
      || '<BODY> <P> <FONT COLOR="BLACK",FONT FACE ="ARIAL",FONT SIZE ="2.5"> Hello , <BR/><BR/><BR/> Dummy Message. Find Table Below ';
   p_message_body :=
         p_message_body
      || '<BR/><BR/> <TABLE> <TR> <TH>Start Time</TH> <TH>End Time</TH> </TR> <TR> <TD>'
      || ls_dt_start
      || '</TD> <TD>'
      || ls_dt_end
      || '</TD> </TR> </TABLE> </BODY> </HTML>';
   l_mail_conn := UTL_SMTP.open_connection (p_smtp_host, p_smtp_port);
   UTL_SMTP.helo (l_mail_conn, p_smtp_host);
   UTL_SMTP.mail (l_mail_conn, 'TEST@ORACLE.COM');
   pf_to_name := 'abc@xyz.com';
   UTL_SMTP.rcpt (l_mail_conn, 'abc@xyz.com');
   UTL_SMTP.open_data (l_mail_conn);
   UTL_SMTP.write_raw_data (l_mail_conn,
                            UTL_RAW.cast_to_raw ('To: ' || pf_to_name || crlf)
                           );
   UTL_SMTP.write_raw_data
                 (l_mail_conn,
                  UTL_RAW.cast_to_raw (   'Date: '
                                       || TO_CHAR
                                                 (SYSDATE,
                                                  'Dy, DD Mon YYYY hh24:mi:ss'
                                                 )
                                       || crlf
                                      )
                 );
   UTL_SMTP.write_raw_data (l_mail_conn,
                            UTL_RAW.cast_to_raw (   'From: '
                                                 || 'TEST@ORACLE.COM'
                                                 || crlf
                                                )
                           );
   UTL_SMTP.write_raw_data (l_mail_conn,
                            UTL_RAW.cast_to_raw (   'Subject: '
                                                 || 'Test {'
                                                 || TO_CHAR (SYSDATE,
                                                             'DD Mon YYYY'
                                                            )
                                                 || '}'
                                                 || crlf
                                                )
                           );
   UTL_SMTP.write_raw_data (l_mail_conn,
                            UTL_RAW.cast_to_raw ('MIME-Version: 1.0' || crlf)
                           );
   UTL_SMTP.write_raw_data
      (l_mail_conn,
       UTL_RAW.cast_to_raw
                      (   'Content-Type: multipart/mixed; boundary="SECBOUND"'
                       || crlf
                       || crlf
                      )
      );
   UTL_SMTP.write_raw_data (l_mail_conn,
                            UTL_RAW.cast_to_raw ('--SECBOUND' || crlf)
                           );
   UTL_SMTP.write_raw_data (l_mail_conn,
                            UTL_RAW.cast_to_raw (   'Content-Type: '
                                                 || p_message_type
                                                 || crlf
                                                 || crlf
                                                )
                           );
   UTL_SMTP.write_raw_data (l_mail_conn,
                            UTL_RAW.cast_to_raw (p_message_body || crlf)
                           );
   UTL_SMTP.write_raw_data (l_mail_conn,
                            UTL_RAW.cast_to_raw ('--SECBOUND' || crlf)
                           );
   UTL_SMTP.write_raw_data (l_mail_conn,
                            UTL_RAW.cast_to_raw ('--SECBOUND' || crlf)
                           );
   --Defining content type as attachment and specifying the filename.
   UTL_SMTP.write_raw_data (l_mail_conn, UTL_RAW.cast_to_raw ('' || crlf));
   UTL_SMTP.write_raw_data (l_mail_conn,
                            UTL_RAW.cast_to_raw ('--SECBOUND' || crlf)
                           );
   --Close connection and send mail.
   UTL_SMTP.close_data (l_mail_conn);
   UTL_SMTP.quit (l_mail_conn);
EXCEPTION
   WHEN OTHERS
   THEN
      NULL;
END;
声明
p_message_body CLOB:=空的_CLOB();
p_smtp_主机VARCHAR2(20):=;
p_smtp_端口VARCHAR2(10):=“25”;
p_message_type VARCHAR2(100):=“text/html”;
crlf VARCHAR2(2):=UTL_TCP.crlf;
ls_dt_start VARCHAR2(50);
l_dt_end VARCHAR2(50);
l_邮件连接UTL_SMTP.connection;
pf_to_name VARCHAR2(100);
开始
开始
选择TO_CHAR(SYSDATE-1,'HH12:MI:SS AM'),
TO_CHAR(SYSDATE+1,'HH12:MI:SS AM')
进入ls_dt_开始,
最后
来自双重;
例外情况
当别人
然后
无效的
结束;
p_消息体:=
'表,th,td{边框:1px纯黑色;边框折叠:折叠;}';
p_消息体:=
消息体
||“

你好,


。查找下表'; p_消息体:= 消息体 ||“

开始时间结束时间” ||开始 || ' ' ||最后 || ' '; l_邮件连接:=UTL_SMTP.open_连接(p_SMTP_主机,p_SMTP_端口); UTL_SMTP.helo(l_邮件连接,p_SMTP主机); UTL_SMTP.mail(l_mail_conn,'TEST@ORACLE.COM'); pf_至_名称:='abc@xyz.com'; UTL_SMTP.rcpt(l_邮件连接,'abc@xyz.com'); UTL_SMTP.open_数据(l_邮件连接); UTL_SMTP.write_raw_data(l_mail_conn, UTL_RAW.cast_to_RAW('to:'| | pf| u to_name | | crlf) ); UTL\u SMTP.write\u原始\u数据 (伦敦邮政局), UTL_RAW.cast_to_RAW('日期:' ||托查 (系统日期, 'Dy,DD Mon YYYY hh24:mi:ss' ) ||crlf ) ); UTL_SMTP.write_raw_data(l_mail_conn, UTL_RAW.cast_to_RAW('From:' || 'TEST@ORACLE.COM' ||crlf ) ); UTL_SMTP.write_raw_data(l_mail_conn, UTL_RAW.cast_to_RAW('主题:' ||“测试{” ||至_CHAR(SYSDATE, “DD Mon YYYY” ) || '}' ||crlf ) ); UTL_SMTP.write_raw_data(l_mail_conn, UTL_RAW.cast_to_RAW('MIME-Version:1.0'| | crlf) ); UTL\u SMTP.write\u原始\u数据 (伦敦邮政局), UTL_RAW.将_铸造到_RAW ('Content Type:multipart/mixed;boundary=“SECBOUND”' ||crlf ||crlf ) ); UTL_SMTP.write_raw_data(l_mail_conn, UTL|u RAW.cast|u to|u RAW('--SECBOUND'| crlf) ); UTL_SMTP.write_raw_data(l_mail_conn, UTL_RAW.cast_to_RAW('内容类型:' ||p_消息类型 ||crlf ||crlf ) ); UTL_SMTP.write_raw_data(l_mail_conn, UTL|U RAW.cast|U to|U RAW(p|U消息|U正文| crlf) ); UTL_SMTP.write_raw_data(l_mail_conn, UTL|u RAW.cast|u to|u RAW('--SECBOUND'| crlf) ); UTL_SMTP.write_raw_data(l_mail_conn, UTL|u RAW.cast|u to|u RAW('--SECBOUND'| crlf) ); --将内容类型定义为附件并指定文件名。 UTL_SMTP.write_raw_data(l_mail_conn,UTL_raw.cast_to_raw(''crlf)); UTL_SMTP.write_raw_data(l_mail_conn, UTL|u RAW.cast|u to|u RAW('--SECBOUND'| crlf) ); --关闭连接并发送邮件。 UTL_SMTP.close_数据(l_邮件连接); UTL_SMTP.quit(l_邮件连接); 例外情况 当别人 然后 无效的 结束;


您可以用表替换所需的数据。

您可以生成HTML脚本并将其添加到邮件中。 就像您想要表格格式一样,您可以创建HTML脚本并将其附加到邮件中

请参考以下内容

DECLARE
   p_message_body   CLOB                := EMPTY_CLOB ();
   p_smtp_host      VARCHAR2 (20)       := <SMTP_SERVER_IP>;
   p_smtp_port      VARCHAR2 (10)       := '25';
   p_message_type   VARCHAR2 (100)      := ' text/html';
   crlf             VARCHAR2 (2)        := UTL_TCP.crlf;
   ls_dt_start      VARCHAR2 (50);
   ls_dt_end        VARCHAR2 (50);
   l_mail_conn      UTL_SMTP.connection;
   pf_to_name       VARCHAR2 (100);
BEGIN
   BEGIN
      SELECT TO_CHAR (SYSDATE - 1, 'HH12:MI:SS AM'),
             TO_CHAR (SYSDATE + 1, 'HH12:MI:SS AM')
        INTO ls_dt_start,
             ls_dt_end
        FROM DUAL;
   EXCEPTION
      WHEN OTHERS
      THEN
         NULL;
   END;

   p_message_body :=
      '<HTML> <HEAD> <STYLE> table, th, td { border: 1px solid black; border-collapse: collapse; } </STYLE> </HEAD> ';
   p_message_body :=
         p_message_body
      || '<BODY> <P> <FONT COLOR="BLACK",FONT FACE ="ARIAL",FONT SIZE ="2.5"> Hello , <BR/><BR/><BR/> Dummy Message. Find Table Below ';
   p_message_body :=
         p_message_body
      || '<BR/><BR/> <TABLE> <TR> <TH>Start Time</TH> <TH>End Time</TH> </TR> <TR> <TD>'
      || ls_dt_start
      || '</TD> <TD>'
      || ls_dt_end
      || '</TD> </TR> </TABLE> </BODY> </HTML>';
   l_mail_conn := UTL_SMTP.open_connection (p_smtp_host, p_smtp_port);
   UTL_SMTP.helo (l_mail_conn, p_smtp_host);
   UTL_SMTP.mail (l_mail_conn, 'TEST@ORACLE.COM');
   pf_to_name := 'abc@xyz.com';
   UTL_SMTP.rcpt (l_mail_conn, 'abc@xyz.com');
   UTL_SMTP.open_data (l_mail_conn);
   UTL_SMTP.write_raw_data (l_mail_conn,
                            UTL_RAW.cast_to_raw ('To: ' || pf_to_name || crlf)
                           );
   UTL_SMTP.write_raw_data
                 (l_mail_conn,
                  UTL_RAW.cast_to_raw (   'Date: '
                                       || TO_CHAR
                                                 (SYSDATE,
                                                  'Dy, DD Mon YYYY hh24:mi:ss'
                                                 )
                                       || crlf
                                      )
                 );
   UTL_SMTP.write_raw_data (l_mail_conn,
                            UTL_RAW.cast_to_raw (   'From: '
                                                 || 'TEST@ORACLE.COM'
                                                 || crlf
                                                )
                           );
   UTL_SMTP.write_raw_data (l_mail_conn,
                            UTL_RAW.cast_to_raw (   'Subject: '
                                                 || 'Test {'
                                                 || TO_CHAR (SYSDATE,
                                                             'DD Mon YYYY'
                                                            )
                                                 || '}'
                                                 || crlf
                                                )
                           );
   UTL_SMTP.write_raw_data (l_mail_conn,
                            UTL_RAW.cast_to_raw ('MIME-Version: 1.0' || crlf)
                           );
   UTL_SMTP.write_raw_data
      (l_mail_conn,
       UTL_RAW.cast_to_raw
                      (   'Content-Type: multipart/mixed; boundary="SECBOUND"'
                       || crlf
                       || crlf
                      )
      );
   UTL_SMTP.write_raw_data (l_mail_conn,
                            UTL_RAW.cast_to_raw ('--SECBOUND' || crlf)
                           );
   UTL_SMTP.write_raw_data (l_mail_conn,
                            UTL_RAW.cast_to_raw (   'Content-Type: '
                                                 || p_message_type
                                                 || crlf
                                                 || crlf
                                                )
                           );
   UTL_SMTP.write_raw_data (l_mail_conn,
                            UTL_RAW.cast_to_raw (p_message_body || crlf)
                           );
   UTL_SMTP.write_raw_data (l_mail_conn,
                            UTL_RAW.cast_to_raw ('--SECBOUND' || crlf)
                           );
   UTL_SMTP.write_raw_data (l_mail_conn,
                            UTL_RAW.cast_to_raw ('--SECBOUND' || crlf)
                           );
   --Defining content type as attachment and specifying the filename.
   UTL_SMTP.write_raw_data (l_mail_conn, UTL_RAW.cast_to_raw ('' || crlf));
   UTL_SMTP.write_raw_data (l_mail_conn,
                            UTL_RAW.cast_to_raw ('--SECBOUND' || crlf)
                           );
   --Close connection and send mail.
   UTL_SMTP.close_data (l_mail_conn);
   UTL_SMTP.quit (l_mail_conn);
EXCEPTION
   WHEN OTHERS
   THEN
      NULL;
END;
声明
p_message_body CLOB:=空的_CLOB();
p_smtp_主机VARCHAR2(20):=;
p_smtp_端口VARCHAR2(10):=“25”;
p_message_type VARCHAR2(100):=“text/html”;
crlf VARCHAR2(2):=UTL_TCP.crlf;
ls_dt_start VARCHAR2(50);
l_dt_end VARCHAR2(50);
l_邮件连接UTL_SMTP.connection;
pf_to_name VARCHAR2(100);
开始
开始
选择TO_CHAR(SYSDATE-1,'HH12:MI:SS AM'),
TO_CHAR(SYSDATE+1,'HH1
DECLARE
    Message CLOB;
BEGIN

    FOR aMsg IN (SELECT Log_id, Procedure_name, Fail_type, Message FROM log_messages ORDER BY Log_id) LOOP
        Message := Message || aMsg.Log_id ||' - '|| aMsg.Procedure_name ||' - '|| aMsg.Fail_type ||' - '|| aMsg.Message || CHR(13);
    end loop;

    SendMail(
        Subject => 'You got some logs', 
        Message => Message, 
        ToMail => VARCHAR_TABLE_TYPE('hsdfafjh@mydomain.com'),   
        FromMail => 'noreply@mydomain.com', 
        FromName => 'Oracle User: '||USER);
END;
DECLARE
    Message CLOB;
    Attachment CLOB;
BEGIN
    Message := 'Open attachment to see log file';
    FOR aMsg IN (SELECT Log_id, Procedure_name, Fail_type, Message FROM log_messages ORDER BY Log_id) LOOP
        Attachment := Attachment || aMsg.Log_id ||' - '|| aMsg.Procedure_name ||' - '|| aMsg.Fail_type ||' - '|| aMsg.Message || CHR(13);
    end loop;

    Mailing.SendMail(
        Subject => 'You got some logs', 
        Message => Message, 
        ToMail => VARCHAR_TABLE_TYPE('hsdfafjh@mydomain.com'),   
        FromMail => 'noreply@mydomain.com', 
        FromName => 'Oracle User: '||USER,
        TxtAttachment => Attachment,
        FileName => 'logfile.txt');
END;