【发布时间】:2019-07-22 04:07:54
【问题描述】:
我想让它可配置,而不是硬编码值 dbms_scheduler.create_job repaeat_interval。因此,我创建了一个新表,允许配置作业中的 repeat_interval。
下面的过程将列作为输入参数:
PROCEDURE scheduled_job IS
v_start_date swpurge_job_config.start_date%TYPE;
v_freq swpurge_job_config.freq%TYPE;
v_byday swpurge_job_config.byday%TYPE;
v_byhour swpurge_job_config.byhour%TYPE;
v_byminute swpurge_job_config.byminute%TYPE;
v_bysecond swpurge_job_config.bysecond%TYPE;
v_end_date swpurge_job_config.end_date%TYPE;
BEGIN
SELECT start_date
,freq
,byday
,byhour
,byminute
,bysecond
,end_date
INTO v_start_date
,v_freq
,v_byday
,v_byhour
,v_byminute
,v_bysecond
,v_end_date
FROM swpurge_job_config;
dbms_scheduler.create_job(job_name => 'Purge_MW_Log_Data'
,job_type => 'STORED_PROCEDURE'
,job_action => 'DBA_UTILS_OWNER.PURGE_TABLES'
,start_date => 'SYSTIMESTAMP'
,repeat_interval => 'freq' || '=' ||
v_freq || '; ' ||
'byday' || '=' ||
v_byday || '; ' ||
'byhour' || '=' ||
v_byhour || '; ' ||
'byminute' || '=' ||
v_byminute || '; ' ||
'bysecond' || '=' ||
v_bysecond || ';'
,end_date => NULL
,enabled => TRUE
,auto_drop => FALSE
,comments => 'runs weekly and looks for partitions that needs to be purged');
END scheduled_job;
不知道该怎么做。任何帮助表示赞赏。
错误消息:
ORA-01858:在需要数字的地方发现了一个非数字字符 ORA-06512:在“DBA_UTILS_OWNER.SWPURGE”,第 450 行 > “dbms_scheduler.create_job(job_name => 'Purge_MW_Log_Data'”
【问题讨论】:
-
这是什么意思,“这是错误的”?在我看来很漂亮。
-
@Littlefoot 我收到 PLS-00306:调用“CREATE_JOB”时参数的数量或类型错误
-
检查 JOB_ACTION。除非我错了,否则它必须用单引号括起来,所以它类似于
job_action => chr(39) || job_config.job_action || chr(39) -
@Littlefoot 还是同样的错误...
-
很难说没有看到表定义。但是 create_job 的“启用”参数是 BOOLEAN 类型的,因为你的表中不能有 BOOLEAN 类型的列,我会怀疑。
标签: oracle plsql dbms-scheduler