Hi All,
I posted the the above question in Stackoverflow as well but no solution from anyone.
I required your helping hands to solve this
Stackoverflow : https://stackoverflow.com/questions/72674834/how-to-catch-error-and-store-to-error-table-pl-sql?noredirect=1#comment128372569_72674834
My GUI designed in Oracle Apex application

Below is my Procedure which sends mail
CREATE OR REPLACE PROCEDURE send_mail (p_to IN VARCHAR2,
p_from IN VARCHAR2,
p_subject IN VARCHAR2,
p_html_msg IN VARCHAR2 DEFAULT NULL,
p_smtp_host IN VARCHAR2,
p_smtp_port IN NUMBER DEFAULT 25)
AS
l_mail_conn UTL_SMTP.connection;
l_boundary VARCHAR2(50) := '----=*#abc1234321cba#*=';
BEGIN
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, p_from);
UTL_SMTP.rcpt(l_mail_conn, p_to);
UTL_SMTP.open_data(l_mail_conn);
UTL_SMTP.write_data(l_mail_conn, 'Date: ' || TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, 'To: ' || p_to || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, 'From: ' || p_from || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, 'Subject: ' || p_subject || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, 'Reply-To: ' || p_from || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, 'MIME-Version: 1.0' || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, 'Content-Type: multipart/alternative; boundary="' || l_boundary || '"' || UTL_TCP.crlf || UTL_TCP.crlf);
IF p_html_msg IS NOT NULL THEN
UTL_SMTP.write_data(l_mail_conn, '--' || l_boundary || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, 'Content-Type: text/html; charset="iso-8859-1"' || UTL_TCP.crlf || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, p_html_msg);
UTL_SMTP.write_data(l_mail_conn, UTL_TCP.crlf || UTL_TCP.crlf);
END IF;
UTL_SMTP.write_data(l_mail_conn, '--' || l_boundary || '--' || UTL_TCP.crlf);
UTL_SMTP.close_data(l_mail_conn);
UTL_SMTP.quit(l_mail_conn);
END;
/
Below is my code written under send mail button of my application as Dynamic action
declare
l_context apex_exec.t_context;
l_emailsidx pls_integer;
l_namesids pls_integer;
l_region_id number;
l_html VARCHAR2(32767);
begin
select region_id
into l_region_id
from apex_application_page_regions
where application_id = :APP_ID
and page_id = 1
and static_id = 'CUSTOMERS';
l_context := apex_region.open_query_context (
p_page_id => 1,
p_region_id => l_region_id );
-- Get the column positions for EMAIL and NAME columns
l_emailsidx := apex_exec.get_column_position( l_context, 'EMAIL' );
l_namesids := apex_exec.get_column_position( l_context, 'NAME' );
while apex_exec.next_row( l_context ) loop
send_mail(
p_to => apex_exec.get_varchar2( l_context, l_emailsidx ),
p_from => 'admin@mycompany.com',
p_subject => :P2_SUBJECT,
p_html_msg => :P3_HTML,
p_smtp_host => 'smtp.mycompany.com');
Exception
when OTHERS THEN
// log my error to ERROR table
CONTINUE;
end loop;
apex_exec.close( l_context );
exception
when others then
apex_exec.close( l_context );
raise;
end;
When I click on send mail button a mail is sent to all my users which are their in my interactive report.
While sending mails one email id was not processed by my procedure to send mail as the user email id does not exist thrown me PL/SQL error like something ORA.. No data found .. email id : abhi@gmail.com. So I want the error to be stored into my ERROR table : emp_error
My error table :
create emp_error (
error_msg clob,
emailid clob
);
Expected output :
ERROR_MSG | EMAILID
ORA...something error | abhi@gmail.com
Basically I want to store invalid email ids to my error table
So how I am trying is if email not sent then error occurs and that error logging to my error table with his email id.
I tried below method but does not work for me
Exception
when OTHERS THEN
Insert into emp_error values(p_to,sqlerr);
CONTINUE;
Note : p_to : To_email of user : abhia@gmail.com
My process should not be stopped if any invalid email error occurs just continue triggering next user a mail to his email id. So not to stop I have added continue.
But if error occurred just store to my error table.