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!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

dbms_scheduler and email_notification

mafaizJun 2 2011 — edited Jun 3 2011
Hi,

My task is to create scheduler using dbms_scheduler and send mail notification to the authorized user..

The following process i have done to complete my task,but it not works..

Step1.create logon table

create table logon_xe(L_SYSDATE DATE,L_ORA_LOGIN_USER VARCHAR2(100),L_MACHINE VARCHAR2(100),L_PROGRAM VARCHAR2(100),L_OSUSER VARCHAR2(100));

Step2.create trigger for the create table
TRIGGER LOGON_XE AFTER LOGON ON XE
BEGIN
insert into logon_XE
select sysdate, ora_login_user, machine, program, osuser
FROM SYS.DUAL,
SYS.V_$SESSION
WHERE SYS_CONTEXT('USERENV','SESSIONID' ) = audsid(+)
AND machine <> '<machine_name>';
END;

Step3.create scheduler program
BEGIN
-- PL/SQL Block.
DBMS_SCHEDULER.create_program (
program_name => 'logon_plsql_block_prog',
program_type => 'PLSQL_BLOCK',
program_action => 'BEGIN insert into logon_xe values(sysdate)); END;',
enabled => TRUE,
comments => 'Program to gather LOGON_XE statistics using a PL/SQL block.');
END;

Step4.create scheduler

BEGIN
DBMS_SCHEDULER.create_schedule (
schedule_name => 'logon_xe_daily_schedule',
start_date => SYSTIMESTAMP,
repeat_interval => 'freq=daily;byday=TUE,WED,THU,FRI; byhour=16,17;',
end_date => NULL,
comments => 'Repeats daily, on the mentioned hour, for ever.');
END;
/
Step5.create job

DBMS_SCHEDULER.create_job (
job_name => 'LOGON_XE_JOB',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN insert into logon_xe values(sysdate); END;',
start_date => SYSTIMESTAMP,
repeat_interval => 'freq=DAILY; byday=Tue,Wed,Thu,Fri; byhour=16,17;',
end_date => NULL,
enabled => TRUE,
comments => 'Job defined entirely by the CREATE JOB procedure.');
END;

Step6.Run job

BEGIN
-- Run job synchronously.
DBMS_SCHEDULER.run_job (job_name => 'LOGON_XE_JOB',
use_current_session => FALSE);
END;
/

AFTER CREATED SCHEDULER,I HAVE DECLARE PROCEDURE FOR E-MAIL NOTIFICATION.

Step7.create procedure for mail notification



CREATE OR REPLACE PROCEDURE send_mail (

p_mail_host IN VARCHAR2,

p_from IN VARCHAR2,

p_to IN VARCHAR2,

p_subject IN VARCHAR2,

p_message IN VARCHAR2)

AS

l_mail_conn UTL_SMTP.connection;

BEGIN

l_mail_conn := UTL_SMTP.open_connection(p_mail_host, 25);

UTL_SMTP.helo(l_mail_conn, p_mail_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') || Chr(13));

UTL_SMTP.write_data(l_mail_conn, 'From: ' || p_from || Chr(13));

UTL_SMTP.write_data(l_mail_conn, 'Subject: ' || p_subject || Chr(13));

UTL_SMTP.write_data(l_mail_conn, 'To: ' || p_to || Chr(13));

UTL_SMTP.write_data(l_mail_conn, '' || Chr(13));

UTL_SMTP.write_data(l_mail_conn, p_message || Chr(13));



UTL_SMTP.close_data(l_mail_conn);

UTL_SMTP.quit(l_mail_conn);

END send_mail;

/

Step8.
BEGIN

send_mail(p_mail_host => 'host',

p_from => 'user@mycompany.com',

p_to => 'user1@mycompany.com',

p_subject => 'Test SEND_MAIL Procedure',

p_message => 'If you are reading this it worked!');

END;

/
step 9:

CREATE OR REPLACE PROCEDURE automated_email_alert AS

l_mail_host VARCHAR2(50) := 'host';

l_from VARCHAR2(50) := 'user@mycompany.com';

l_to VARCHAR2(50) := 'user1@mycompany.com';

BEGIN

insert into logon_xe values(
user,
sys_context('USERENV','SESSIONID'),
sys_context('USERENV','HOST'),
null,
null,
null,
sysdate,
to_char(sysdate, 'hh24:mi:ss'),
null,
null,
null
);

send_mail(p_mail_host => l_mail_host,

p_from => l_from,

p_to => l_to,

p_subject => 'AUTOMATED_EMAIL_ALERT (MYSID): Success',

p_message => 'AUTOMATED_EMAIL_ALERT (MYSID) completed successfully!');



EXCEPTION

WHEN OTHERS THEN

send_mail(p_mail_host => l_mail_host,

p_from => l_from,

p_to => l_to,

p_subject => 'AUTOMATED_EMAIL_ALERT (MYSID): Error',

p_message => 'AUTOMATED_EMAIL_ALERT (MYSID) failed with the following error:' || SQLERRM);

END automated_email_alert;

/


After successfuly executed all the above steps,still my task haven't completed.
I have tried to implement this on oracle XE 10.2.0.2
My scheduled jobs was not running on the mentioned time,also unable to receive mail ...
Let me want to know what i have done a mistake.

Advice me on this...

Edited by: mafaiz on Jun 3, 2011 10:40 AM

Comments

Locked Post
New comments cannot be posted to this locked post.

Post Details

Locked on Jun 30 2011
Added on Jun 2 2011
1 comment
263 views