You are on page 1of 4

PROCEDURE GCN_ORDER(errbuf OUT VARCHAR2, retcode OUT VARCHAR2) IS rc integer; crlf VARCHAR2(2) := CHR(13) CHR(10); mesg VARCHAR2(1000); c utl_tcp.

connection; L_FROM_DATE DATE; L_TO_DATE DATE; msg_from to_addresses cc_addresses email_addresses msg_subject msg_text1 msg_text2 msg_text3 msg_text4 v_mail_to lv_gcn VARCHAR2(100) := 'erp@yyy.com'; VARCHAR2(1000); VARCHAR2(1000); VARCHAR2(2000); VARCHAR2(200) := 'E-mail Alert: '; VARCHAR2(15) := 'Dear Sir,'; VARCHAR2(500) := 'Please find the attached file,'; VARCHAR2(25) := 'Division'; VARCHAR2(25) := 'For the period : '; VARCHAR2(1000); varchar2(1000);

next_column number; recipient_email_length number; single_recipient_addr varchar2(100); v_is_there_any_attachment CHAR(1):='N'; --New var. cursor cur_select(L_FROM_DATE DATE, L_TO_DATE DATE) is SELECT (substr(wdd.source_header_type_name, 5) ',' oha.order_number ',' wdd.attribute1 ',' TO_DATE(wdd.attribute2, 'dd/mm/rrrr') ',' TO_DATE(oha.creation_date, 'dd/mm/rrrr') ',' TO_DATE(ola.creation_date, 'dd/mm/rrrr') ',' ola.ordered_item) gcn FROM apps.oe_order_headers_all oha, apps.oe_order_lines_all ola, apps.wsh_delivery_details wdd WHERE oha.org_id = 92 AND oha.org_id = ola.org_id AND oha.header_id = ola.header_id AND wdd.inventory_item_id = ola.inventory_item_id AND wdd.source_header_number = oha.order_number AND wdd.source_line_id = ola.line_id AND wdd.org_id = oha.org_id AND wdd.attribute_category = '92Freight' AND TO_DATE(wdd.attribute2, 'dd/mm/rrrr') < TO_DATE(ola.creation_date, 'dd/mm/rrrr') AND TO_DATE(wdd.attribute2, 'dd/mm/rrrr') BETWEEN L_FROM_DATE AND L_TO_DATE AND oha.flow_status_code NOT IN ('BOOKED', 'ENTERED'); cursor cur_to_email is SELECT email_address FROM alert_users_ID WHERE org_id IN (1, 92) AND status_flag = 'Y' AND report_id = 3 AND MAIL_TYPE = 'To' AND (module = 'AR' OR module IS NULL); cursor cur_cc_email is

SELECT FROM WHERE AND AND AND AND BEGIN --FROM select INTO from where AND AND

email_address alert_users_ID org_id IN (1, 92) status_flag = 'Y' report_id = 3 MAIL_TYPE = 'Cc' (module = 'AR' OR module IS NULL);

AND TO DATE LOGIC MIN(START_DATE), MAX(END_DATE) L_FROM_DATE, L_TO_DATE apps.gl_period_statuses closing_status = 'O' APPLICATION_ID = 101 SET_OF_BOOKS_ID = 2; ',' c_to.email_address;

for c_to in cur_to_email loop to_addresses := to_addresses end loop;

to_addresses := ltrim(to_addresses, ','); for c_cc in cur_cc_email loop cc_addresses := cc_addresses end loop; ',' c_cc.email_address;

cc_addresses := ltrim(cc_addresses, ','); email_addresses := to_addresses ',' cc_addresses;

recipient_email_length := length(email_addresses); email_addresses := email_addresses ','; -- Add comma for the last as ddress next_column := 1; if instr(email_addresses, ',') = 0 then -- Single E-mail address single_recipient_addr := email_addresses; recipient_email_length := 1; end if; c := utl_tcp.open_connection(remote_host => '127.0.0.1', remote_port => 25, tx_timeout => null); rc := utl_tcp.write_line(c, 'HELO 127.0.0.1'); rc := utl_tcp.write_line(c, 'EHLO 127.0.0.1'); rc := utl_tcp.write_line(c, 'MAIL FROM: ' msg_from);

while next_column <= recipient_email_length loop -- Process Multiple E-mail addresses in the loop OR single E-mail address on ce. single_recipient_addr := substr(email_addresses, next_column, instr(email_addresses, ',', next_column) next_column); next_column := instr(email_addresses, ',', next_column) + 1;

--rc := utl_tcp.write_line(c, 'MAIL FROM: ' msg_from); rc := utl_tcp.write_line(c, 'RCPT TO: ' single_recipient_addr); end loop; rc := utl_tcp.write_line(c, 'DATA'); rc := utl_tcp.write_line(c, 'Date: ' TO_CHAR(SYSDATE, 'dd Mon yy hh24:mi:ss')); rc := utl_tcp.write_line(c, 'From: ' msg_from ' <' msg_from '>'); rc := utl_tcp.write_line(c, 'MIME-Version: 1.0'); rc := utl_tcp.write_line(c, 'To: ' to_addresses); rc := utl_tcp.write_line(c, 'Cc: ' cc_addresses); rc := utl_tcp.write_line(c, 'Subject: ' msg_subject); rc := utl_tcp.write_line(c, 'Content-Type: multipart/mixed;'); rc := utl_tcp.write_line(c, ' boundary="-----SECBOUND"'); rc := utl_tcp.write_line(c, ''); rc := utl_tcp.write_line(c, '-------SECBOUND'); rc := utl_tcp.write_line(c, 'Content-Type: text/plain'); rc := utl_tcp.write_line(c, 'Content-Transfer-Encoding: 7bit'); rc := utl_tcp.write_line(c, ''); rc := utl_tcp.write_line(c, msg_text1); rc := utl_tcp.write_line(c, ' '); rc := utl_tcp.write_line(c, msg_text2); rc := utl_tcp.write_line(c, ' '); rc := utl_tcp.write_line(c, msg_text3); rc := utl_tcp.write_line(c, msg_text4 to_char(l_from_date, 'MON-YY') ' to ' to_char(l_to_date, 'MON-YY')); rc := utl_tcp.write_line(c, ''); rc := utl_tcp.write_line(c, '-------SECBOUND'); rc := utl_tcp.write_line(c, 'Content-Type: text/plain;'); rc := utl_tcp.write_line(c, ' name="GCN_Details.csv"'); rc := utl_tcp.write_line(c, 'Content-Transfer_Encoding: 8bit'); rc := utl_tcp.write_line(c, 'Content-Disposition: attachment;'); --Indicates t hat this is an attachment. rc := utl_tcp.write_line(c, ' filename="GCN_Details.csv"'); rc := utl_tcp.write_line(c, '-------SECBOUND'); rc := utl_tcp.write_line(c, ''); begin -- WRITE COLUMN HEADERS rc := utl_tcp.write_text(c, 'BRANCH' rc := utl_tcp.write_line(c, ' '); ',' 'ORDER NUMBER');

for c1 in cur_select(L_FROM_DATE, L_TO_DATE) loop --You are starting to writ e the data lv_gcn := c1.gcn; rc := utl_tcp.write_text(c, lv_gcn); rc := utl_tcp.write_line(c, ' '); v_is_there_any_attachment:='Y';--Is there any data ? end loop; exception when others then dbms_output.put_line('error : ' sqlerrm); rc := utl_tcp.write_text(c, 'Data Error'); end; If v_is_there_any_attachment ='Y' THEN rc := utl_tcp.write_line(c, ''); rc := utl_tcp.write_line(c, '.');

rc := utl_tcp.write_line(c, '-------SECBOUND'); --end loop; END If; rc := utl_tcp.write_line(c, 'QUIT'); dbms_output.put_line(utl_tcp.get_line(c, TRUE)); utl_tcp.close_connection(c); EXCEPTION when others then utl_tcp.close_connection(c); raise_application_error(-20000, SQLERRM); END GCN_ORDER;

You might also like