Her*_*ing 4 oracle oracle-11g plsql jobs
我有一个调度程序,它运行一个需要输入参数的存储过程。
BEGIN
DBMS_SCHEDULER.DROP_PROGRAM
(program_name => 'MYSCHEMA.EXPORT_SCHEMA_STARTING');
END;
/
BEGIN
SYS.DBMS_SCHEDULER.CREATE_PROGRAM
(
program_name => 'MYSCHEMA.EXPORT_SCHEMA_STARTING'
,program_type => 'STORED_PROCEDURE'
,program_action => 'MYSCHEMA.EXPORT_STATUS'
,number_of_arguments => 0
,enabled => FALSE
,comments => NULL
);
SYS.DBMS_SCHEDULER.ENABLE
(name => 'MYSCHEMA.EXPORT_SCHEMA_STARTING');
END;
/
Run Code Online (Sandbox Code Playgroud)
如何将参数传递给EXPORT_STATUS
过程?
到目前为止,我将其更改为运行 PL/SQL BLOCK 的程序:
BEGIN
SYS.DBMS_SCHEDULER.CREATE_PROGRAM
(
program_name => 'MYSCHEMA.EXPORT_SCHEMA_STARTING'
,program_type => 'PLSQL_BLOCK'
,program_action => 'MYSCHEMA.EXPORT_STATUS(''STARTING''); END;'
,number_of_arguments => 0
,enabled => FALSE
,comments => NULL
);
SYS.DBMS_SCHEDULER.ENABLE
(name => 'MYSCHEMA.EXPORT_SCHEMA_STARTING');
END;
/
Run Code Online (Sandbox Code Playgroud)
它按我的预期工作。但是,如果有人知道如何将其保留为以前的格式,我们将不胜感激。
当您使用CREATE_PROGRAM
procedure创建程序时,您可以使用number_of_arguments
parameter指定它期望的参数数量。
如果出于某种原因,您想修改number_of_arguments
现有 Scheduler 对象(在我们的示例中为程序)的某些属性(在我们的示例中),则无需删除该对象并再次使用新的属性值重新创建它,您可以只使用SET_ATTRIBUTE
程序代替:
dbms_scheduler.set_attribute(
name => 'my_program'
, attribute => 'number_of_arguments'
, value => 1);
Run Code Online (Sandbox Code Playgroud)
创建程序并设置其所有属性后,您可以使用DEFINE_PROGRAM_ARGUMENT
procedure定义程序的参数(如果有):
dbms_scheduler.define_program_argument(
program_name => 'my_program'
, argument_position => 1
, argument_type => 'VARCHAR2'
, default_value => 'STARTING'
);
Run Code Online (Sandbox Code Playgroud)
在这里,我们定义了程序参数及其默认值。我们可以不指定默认值,但在这种情况下,我们必须使用SET_JOB_ARGUMENT_VALUE
procedure设置参数的值。例如,如果您创建了作业并按如下方式指定了关联程序:
dbms_scheduler.create_job(
job_name => 'call_my_program'
, program_name => 'my_program'
...
);
Run Code Online (Sandbox Code Playgroud)
您必须以这种方式在与作业关联的程序中设置参数的值:
dbms_scheduler.set_job_argument_value(
job_name => 'call_my_program'
, argument_position => 1
, argument_value => 'STARTING');
Run Code Online (Sandbox Code Playgroud)
如果您已经为带有DEFINE_PROGRAM_ARGUMENT
过程的程序定义了参数的默认值,并且还使用过程设置了参数的值,则使用SET_JOB_ARGUMENT_VALUE
过程设置的参数值SET_JOB_ARGUMENT_VALUE
将覆盖使用过程设置的默认参数值DEFINE_PROGRAM_ARGUMENT
。
归档时间: |
|
查看次数: |
31697 次 |
最近记录: |