问题描述
我想在特定日期和时间创建仅在该日期和时间运行一次的 oracle 作业 然后自动掉线。
该作业还应运行带有 2 个参数的过程。
注意:l_id 我使用这个变量在过程名称旁边添加数字以避免任何形式的重复。
P94_DATE:用户将选择日期和时间并将其存储在该变量中。
这里是我到目前为止发现的,但是当我运行它时,它给了我“语句继续”但是当我检查作业是否在“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;
解决方法
当 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,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;
,
“它不工作”没有找到任何错误消息参考,并且完全没有可操作的信息。 那就是:
-
您将 JOB_TYPE 指定为 STORED_PROCEDURE,因此 JOB_ACTION 应该是存储过程的名称。相反,你给它一个匿名块的代码。
-
JOB_NAME 包含似乎试图包含变量的字符串连接。该值从何而来,您认为在执行此 CREATE_JOB 时它是如何填充的?
3)START_DATE 似乎也试图包含一个变量/参数。同样,该值从何而来,您认为在执行此 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'
如果这不能满足您的要求(尤其是那些尝试包含某种参数的尝试,请更详细地解释您要使用它们实现的目标。