使用参数创建 oracle 作业 运行 过程一次

create oracle job run procedure with parameters once

我想在特定日期和时间创建 oracle 作业,运行仅在该日期和时间创建一次 然后自动掉线。

作业应该 运行 也是一个带有 2 个参数的过程。

注意:l_id我使用这个变量在过程名称旁边添加数字以避免任何重复。

P94_DATE:用户将选择日期和时间,并将其存储在该变量中。

这里是我到目前为止的发现,但是当我 运行 这个时,它给了我 'statement proceed' 但是当我检查作业是否成功创建时 'sys.all_scheduler_jobs' 它不存在。

dbms_scheduler.create_job (
job_name           =>  'eba_sb_reminder_s'||l_id,
job_type           =>  'STORED_PROCEDURE',
 job_action         =>  'BEGIN send_Schedule_reminders(1,2); END;',
 start_date         =>  :P94_DATE, -- I need to assign time also !!
 enabled            =>  true,
comments           => 'check if there is new reminders needs to be send in specific date and time'


 );
end;

“它不工作”没有找到任何错误消息参考,并且完全没有可操作的信息。 也就是说:

  1. 您将 JOB_TYPE 指定为 STORED_PROCEDURE,因此 JOB_ACTION 应该是存储过程的名称。相反,你给它一个匿名块的代码。

  2. JOB_NAME 包含一个似乎试图包含变量的字符串连接。该值从何而来?当您执行此 CREATE_JOB?

    时,您认为它是如何填充的

3)START_DATE 似乎也试图包含一个 variable/parameter。同样,该值从何而来?当您执行此 CREATE_JOB?

时,您认为它是如何填充的
dbms_scheduler.create_job (
job_name           =>  'eba_sb_reminder_s',
job_type           =>  'STORED_PROCEDURE',
 job_action         =>  'send_Schedule_reminders(1,2)',
 start_date         =>  to_date('2021-03-22 13:00:00','yyyy-mm-dd hh24:mi:ss'),
 enabled            =>  true,
comments           => 'check if there is new reminders needs to be send in specific date and time'

如果这不能满足您的要求(尤其是那些试图包含某种参数的尝试,请更详细地解释您试图通过它们实现的目标。

job_type 设置为 STORE_PROCEDURE 时,您必须在 job_action 中指定过程的名称。

参数start_date的类型为DATE,在Oracle中也有时间。您只需要设置 :p94_date 一个正确的值,包含日期和时间部分。

如果程序有参数,需要使用DBMS_SCHEDULER.set_job_argument_value指定参数值。

编辑:样本已修改

样本:

BEGIN
   -- This needs to be configured just once.
   DBMS_SCHEDULER.create_program(program_name          => 'test_program',
                                 program_type          => 'STORED_PROCEDURE',
                                 program_action        => 'test',
                                 number_of_arguments   => 2,
                                 enabled               => FALSE,
                                 comments              => 'Comment');

   DBMS_SCHEDULER.define_program_argument(program_name        => 'test_program',
                                          argument_name       => 'p1',
                                          argument_position   => 1,
                                          argument_type       => 'NUMBER',
                                          DEFAULT_VALUE       => NULL);

   DBMS_SCHEDULER.define_program_argument(program_name        => 'test_program',
                                          argument_name       => 'p2',
                                          argument_position   => 2,
                                          argument_type       => 'NUMBER',
                                          DEFAULT_VALUE       => NULL);

   DBMS_SCHEDULER.enable(name => 'test_program');

   -- Create job
   DBMS_SCHEDULER.create_job(
      job_name       => 'test_job',
      program_name   => 'test_program',
      start_date     => :p94_date,
      enabled        => FALSE,
      comments       => 'check if there is new reminders needs to be send in specific date and time');

   -- Set Procedure Parameter
   DBMS_SCHEDULER.set_job_argument_value(job_name => 'test_job', argument_position => 1, argument_value => 1);
   DBMS_SCHEDULER.set_job_argument_value(job_name => 'test_job', argument_position => 2, argument_value => 2);

   -- Enable job
   DBMS_SCHEDULER.enable(name => 'test_job');
END;