Oracle PL/SQL执行的作业/过程?

Oracle PL/SQL执行的作业/过程?,oracle,stored-procedures,plsql,procedure,jobs,Oracle,Stored Procedures,Plsql,Procedure,Jobs,我使用了此PL/SQL,并且工作正常,并且发送了电子邮件 BEGIN FOR cur_rec IN (select JOB, SCHEMA_USER, WHAT from dba_jobs where Broken = 'Y') LOOP BEGIN SCHEMA2.send_mail( p_to => 'receive@test.com', p_from => 'send@test

我使用了此PL/SQL,并且工作正常,并且发送了电子邮件

BEGIN
  FOR cur_rec IN
        (select JOB, SCHEMA_USER, WHAT from dba_jobs where Broken = 'Y') LOOP
    BEGIN
 SCHEMA2.send_mail(
            p_to        => 'receive@test.com',
            p_from      => 'send@test.com',
            p_subject   => 'JOB Report',
            p_message   => 'Job name is: ' || cur_rec.what,
            p_smtp_host => 'webmail.test.com');       
    END;
  END LOOP;
END;
/
我需要每4小时安排一次PL/SQL执行,但我不知道如何使用这些代码创建作业或过程,我已经尝试了很多,但仍然说:

以警告完成

感谢您对构建工作或/和程序的任何帮助

    begin
DBMS_SCHEDULER.CREATE_JOB (
   job_name=>'my_job',
   job_type=>'PLSQL_BLOCK',
   job_action=>
'BEGIN
  FOR cur_rec IN
        (select JOB, SCHEMA_USER, WHAT from dba_jobs where Broken = ''Y'') LOOP
    BEGIN
 SCHEMA2.send_mail(
            p_to        => ''receive@test.com'',
            p_from      => ''send@test.com'',
            p_subject   => ''JOB Report'',
            p_message   => ''Job name is: '' || cur_rec.what,
            p_smtp_host => ''webmail.test.com'');       
    END;
  END LOOP;
END;',
   start_date=>sysdate+1, --start tomorrow at this time
   repeat_interval=>'FREQ=HOURLY; INTERVAL=4', --repeat every 4 hours
auto_drop=>false
);
end;
/
查看文档以了解其他选项


查看文档以了解其他选项

您必须记住在pl/sql中转义引号。也不要像处理常规pl/sql块那样以斜杠(/)结尾。这假设您希望通过数据库进行调度。如果您想通过cron进行调度,那就有点不同了。您必须记住在pl/sql中转义引号。也不要像处理常规pl/sql块那样以斜杠(/)结尾。这假设您希望通过数据库进行调度。如果您想通过cron进行调度,那就有点不同了。