Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Output of Query to be sent in Email Body

Bhavin MamtoraMar 14 2016 — edited Mar 15 2016

Hello Team,

I have created a below mentioned procedure to send the output of the query in an email attachment periodically and it is working fine.

However, I would like to know how to send the output of the query in an email body not an attachment in the form of table as below:


Sample output of query:


NAV Date NAV_VALUEGOLD PRICECASH COMPONENT
01-Feb-162612.08592726.5835-114.4976
02-Feb-162620.98732735.9827-114.9954
03-Feb-162646.57852762.8658-116.2873
04-Feb-162667.54322784.903-117.3598

CREATE OR REPLACE

PROCEDURE PR_NAV_MAILING

AS

  V_FROM        VARCHAR2(80) := 'from_test@abc.com';

  v_Recipient_5 VARCHAR2(80) := 'recipient_test@abc.com';

  V_SUBJECT     VARCHAR2(80) := 'Units creation data ';

  v_Mail_Host   VARCHAR2(30) := 'SMTP IP ADDRESS';

  v_Mail_Conn utl_smtp.Connection;

  crlf VARCHAR2(2) := chr(13)||chr(10);

  CURSOR INS_UPD

  IS

    --QUERY to capture UNITS creation data

    SELECT NAV_DATE,

      NAV_VALUE,

      subscription ,

      redemption

    FROM data_nav

    WHERE scheme_code = '974'

    AND NAV_DATE      >ADD_MONTHS(SYSDATE,-1)

    ORDER BY nav_date DESC;

BEGIN

  v_Mail_Conn := utl_smtp.Open_Connection(v_Mail_Host);

  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_5);

  --OPEN DATA CONNNECTION

  UTL_SMTP.OPEN_DATA(v_mail_conn);

  --MAIL HEADER

  utl_smtp.write_DATA(v_Mail_Conn,'Date: ' || TO_CHAR(sysdate, 'DD-MON-YYYY hh:mi:ss AM') || crlf);

  utl_smtp.write_DATA(v_Mail_Conn,'From: ' || v_From || crlf );

  Utl_Smtp.Write_Data(V_Mail_Conn,'Subject: '|| V_Subject ||' Auto Generated Mail '||Crlf);

  utl_smtp.write_DATA(v_Mail_Conn,'Bcc: ' || v_Recipient_5 ||','|| crlf);

  --MAIL BODY

  utl_smtp.write_DATA(v_Mail_Conn,'MIME-Version: 1.0'|| crlf );

  utl_smtp.write_DATA(v_Mail_Conn,'Content-Type: multipart/mixed;'|| crlf );

  utl_smtp.write_DATA(v_Mail_Conn,' boundary="-----SECBOUND"'|| crlf ||crlf );

  utl_smtp.write_DATA(v_Mail_Conn,'-------SECBOUND'|| crlf );

  utl_smtp.write_DATA(v_Mail_Conn,'Content-Type: text/plain;'|| crlf);

  utl_smtp.write_DATA(v_Mail_Conn,'Content-Transfer_Encoding: 7bit'|| crlf);

  utl_smtp.write_DATA(v_Mail_Conn,NULL|| crlf);

  UTL_SMTP.WRITE_DATA(V_MAIL_CONN,NULL|| CRLF);

  utl_smtp.write_DATA(v_Mail_Conn,NULL|| crlf);

  utl_smtp.write_DATA(v_Mail_Conn,'Dear All, '|| crlf);

  utl_smtp.write_DATA(v_Mail_Conn,'Please find the attached data for units creation. '||crlf);

  utl_smtp.write_DATA(v_Mail_Conn,NULL|| crlf);

  utl_smtp.write_DATA(v_Mail_Conn,NULL|| crlf);

  utl_smtp.write_DATA(v_Mail_Conn,'Regards, '|| crlf);

  UTL_SMTP.WRITE_DATA(V_MAIL_CONN,NULL|| CRLF);

  utl_smtp.write_DATA(v_Mail_Conn,'Operations Team. '|| crlf);

  utl_smtp.write_DATA(v_Mail_Conn,NULL|| crlf);

  utl_smtp.write_data(v_Mail_Conn, utl_tcp.CRLF ||'This mail is Auto generated.');

  --MAIL ATACHMENT

  utl_smtp.write_data(v_Mail_Conn, utl_tcp.CRLF || '-------SECBOUND');

  utl_smtp.write_data(v_Mail_Conn, utl_tcp.CRLF ||'Content-Type: text/csv; ');

  utl_smtp.write_data(v_Mail_Conn, utl_tcp.CRLF ||'Content-Disposition: attachment; filename="Gold_ETF NAV'||'.csv"');

  utl_smtp.write_data(v_Mail_Conn, utl_tcp.CRLF ||'Content-Transfer-Encoding: 8bit');

  utl_smtp.write_data(v_Mail_Conn, utl_tcp.CRLF);

  utl_smtp.write_data(v_Mail_Conn,utl_tcp.CRLF || 'NAV Date, NAV_VALUE,GOLD PRICE,CASH COMPONENT');

  FOR cur_rec IN INS_UPD

  LOOP

    utl_smtp.write_data(v_Mail_Conn, utl_tcp.CRLF || cur_rec.NAV_Date || ',' || cur_rec.NAV_VALUE || ',' || cur_rec.SUBSCRIPTION || ',' || cur_rec.REDEMPTION );

  END LOOP;

  utl_smtp.write_DATA(v_Mail_Conn,NULL|| crlf);

  utl_smtp.write_DATA(v_Mail_Conn,' '|| crlf);

  utl_smtp.write_DATA(v_Mail_Conn,' '|| crlf);

  --CLOSE CONNECTION

  UTL_SMTP.CLOSE_DATA(v_mail_conn);

  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: '||SQLERRM);

END;

This post has been answered by Infantraj on Mar 14 2016
Jump to Answer
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Apr 12 2016
Added on Mar 14 2016
10 comments
3,419 views