使用参数创建 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;
“它不工作”没有找到任何错误消息参考,并且完全没有可操作的信息。
也就是说:
您将 JOB_TYPE 指定为 STORED_PROCEDURE,因此 JOB_ACTION 应该是存储过程的名称。相反,你给它一个匿名块的代码。
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;
我想在特定日期和时间创建 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;
“它不工作”没有找到任何错误消息参考,并且完全没有可操作的信息。 也就是说:
您将 JOB_TYPE 指定为 STORED_PROCEDURE,因此 JOB_ACTION 应该是存储过程的名称。相反,你给它一个匿名块的代码。
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;