[英]To generate >CSV file and automate send an email using Oracle PLSQL
I try to generate .CSV file lists of EQUIPMENT_NAME and EQC_SERVER and automate sending the list every 2 weeks to specific email address.我尝试生成 EQUIPMENT_NAME 和 EQC_SERVER 的 .CSV 文件列表,并每 2 周自动将列表发送到特定的电子邮件地址。
However, from my code i only able to send email but not in .CSV file.但是,从我的代码中,我只能发送电子邮件,但不能发送 .CSV 文件。 Can anyone advise/assist on how to generate .CSV file and send as an email?
任何人都可以建议/协助如何生成 .CSV 文件并作为电子邮件发送吗?
Below is my code:下面是我的代码:
create or replace PACKAGE BODY CIM_SEC_EQC AS
PROCEDURE GET_RECIPIENT_ADD(outCursor out sys_refcursor) AS
v_cursor sys_refcursor;
v_Sql long;
Begin
v_Sql := 'SELECT * FROM OS_ALERT_MAIL_RECIPIENT ORDER BY 1';
OPEN v_cursor
FOR v_Sql;
outCursor := v_Cursor;
END GET_RECIPIENT_ADD;
PROCEDURE GET_JOB AS
CRLF VARCHAR2(2) := CHR(13) || CHR(10);
V_SQLERRM VARCHAR2(200) := '';
V_RCPS VARCHAR2(1000) := '';
V_APP CLOB;
V_PRO CLOB;
V_JOB CLOB;
V_ALL CLOB;
CURSOR C_RCP IS
SELECT * FROM OS_ALERT_MAIL_RECIPIENT ORDER BY 1;
CURSOR C_JOB IS
SELECT EQUIPMENT_NAME,HOST_NAME FROM REGISTERED_APPS ORDER BY 1;
BEGIN
FOR RCP IN C_RCP
LOOP
V_RCPS := V_RCPS||RCP.EMAIL||';';
END LOOP;
IF(V_RCPS != '') THEN
V_RCPS := SUBSTR(V_RCPS, 1, LENGTH(V_RCPS) - 1);
END IF;
FOR JOB_STAT IN C_JOB
LOOP
V_JOB := V_JOB||'<tr><td>'||JOB_STAT.EQUIPMENT_NAME||'</td><td>'||JOB_STAT.HOST_NAME||'</td></tr>';
END LOOP;
IF(V_JOB != ' ') THEN
V_JOB := '<h3>EQC AND SERVER LIST : </h3><table><tr><th>EQUIPMENT ID</th><th>SERVER NAME</th></tr>'||V_JOB||'</table>';
END IF;
IF(V_JOB != ' ')THEN
V_ALL := '<!DOCTYPE html>
<html>
<head>
<style type="text/css">
table {
width:100%;
}
table, th, td {
border: 1px solid black;
border-collapse: collapse;
}
th, td {
padding: 15px;
text-align: left;
}
table tr:nth-child(even) {
background-color: #eee;
}
table tr:nth-child(odd) {
background-color: #fff;
}
table th {
background-color: black;
color: white;
}
</style>
</head>
<body>
<div>';
IF(V_JOB != ' ')THEN
V_ALL := V_ALL||V_JOB;
END IF;
V_ALL := V_ALL||'</div>
</body>
</html>';
SEND_MAIL(V_RCPS,V_ALL);
END IF;
END GET_JOB;
PROCEDURE SEND_MAIL(VTO IN VARCHAR2, VTEXT IN VARCHAR2) AS
MAIL_CONN UTL_SMTP.CONNECTION;
V_MESSAGE VARCHAR2(32000);
V_SENDER VARCHAR2(65);
VEMPF VARCHAR2(2000);
ILEN NUMBER(4);
S VARCHAR2(2000);
IPOS NUMBER(4);
CRLF VARCHAR2(2) := CHR(13) || CHR(10);
VSUBJECT VARCHAR2(120);
BEGIN
V_SENDER := 'TEST@OSRAM-OS.COM';
MAIL_CONN := UTL_SMTP.OPEN_CONNECTION('intrelay.osram.net', 25);
UTL_SMTP.HELO(MAIL_CONN, 'intrelay.osram.net');
UTL_SMTP.MAIL(MAIL_CONN, V_SENDER);
VSUBJECT := 'EQC AND SERVER LIST[THIS IS A SYSTEM GENERATED EMAIL DO NOT REPLY TO THIS EMAIL]';
VEMPF := VTO;
ILEN := LENGTH(VEMPF);
IPOS := 1;
WHILE (ILEN > 0) AND (IPOS > 0)
LOOP
IPOS := INSTR(VEMPF, ';');
IF IPOS > 0 THEN
S := SUBSTR(VEMPF, 1, IPOS - 1);
UTL_SMTP.RCPT(MAIL_CONN, '<' || S || '>');
VEMPF := SUBSTR(VEMPF, IPOS + 1, ILEN - IPOS);
ILEN := LENGTH(VEMPF);
END IF;
END LOOP;
IF (IPOS = 0) AND (ILEN > 0) THEN
UTL_SMTP.RCPT(MAIL_CONN, '<' || VEMPF || '>');
END IF;
V_MESSAGE := V_MESSAGE || 'From: ' || V_SENDER || CRLF;
V_MESSAGE := V_MESSAGE || 'To: ' || '<' || VTO || '>' || CRLF;
V_MESSAGE := V_MESSAGE || 'Subject: ' || VSUBJECT || CRLF;
V_MESSAGE := V_MESSAGE || 'Mime-Version: 1.0' || CRLF;
V_MESSAGE := V_MESSAGE || 'Content-Type: text/html; charset=US-ASCII' || CRLF;
V_MESSAGE := V_MESSAGE || VTEXT;
UTL_SMTP.DATA(MAIL_CONN, V_MESSAGE);
UTL_SMTP.QUIT(MAIL_CONN);
EXCEPTION
WHEN OTHERS THEN
UTL_SMTP.QUIT(MAIL_CONN);
END SEND_MAIL;
END CIM_SEC_EQC;
Thank You.谢谢你。
If you have APEX installed in your database, creating the CSV file and adding it as an attachment is trivial.如果您的数据库中安装了 APEX,则创建 CSV 文件并将其添加为附件很简单。 Below is an example of how to use the
APEX_DATA_EXPORT
package, then use the CSV BLOB that gets generated, and add it as an attachment to an email using the APEX_MAIL
package.下面是如何使用
APEX_DATA_EXPORT
包的示例,然后使用生成的 CSV BLOB,并使用APEX_MAIL
包将其作为电子邮件的附件添加。
DECLARE
l_context apex_exec.t_context;
l_export apex_data_export.t_export;
l_mail_id NUMBER;
BEGIN
apex_session.create_session (100, 2, 'ReportEmailUser');
l_context :=
apex_exec.open_query_context (
p_location => apex_exec.c_location_local_db,
p_sql_query => 'select * from emp');
l_export :=
apex_data_export.export (p_context => l_context, p_format => apex_data_export.c_format_csv);
apex_exec.close (l_context);
l_mail_id :=
APEX_MAIL.SEND (p_to => 'youremail@example.com',
p_from => 'noreply@example.com',
p_body => 'Report is attached',
p_body_html => '<h2>Report is attached</h2>',
p_subj => 'Example Report');
APEX_MAIL.ADD_ATTACHMENT (p_mail_id => l_mail_id,
p_attachment => l_export.content_blob,
p_filename => 'example_report.csv',
p_mime_type => 'text/csv');
apex_mail.push_queue;
apex_session.delete_session;
EXCEPTION
WHEN OTHERS
THEN
apex_exec.close (l_context);
RAISE;
END;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.