我正在使用作业来更新物化视图。
我发现如果exec dbms_refresh.refresh(''"<schema>"."<materialized_view_name>"'');
未提交作业,作业会自行锁定,我想更改作业的“内容”列以包含提交。
我面临两种可能的解决方案:
解决方案1:更复杂的方法是完全重新创建作业,我想避免
跑SYS.DBMS_JOB.REMOVE(14133); COMMIT;
重新创建整个作业以现在包含提交
DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X
,what => 'exec dbms_refresh.refresh(''"<schema>"."<materialized_view_name>"'');COMMIT;'
,next_date => to_date('11-11-2016 00:00:00','dd/mm/yyyy hh24:mi:ss')
,interval => 'trunc(sysdate)+1 '
,no_parse => FALSE
);
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
COMMIT;
END;
/
解决方案 2:通过在视图上运行正常的更新语句直接更新 DBA_JOBS 视图
update dba_jobs set what=(
select what from dba_jobs
where job in ( '1','2','3','<etc>')
)||'COMMIT;'
where job in ( '1','2','3','<etc>');
有没有比这两个更好的解决方案,解决方案两个可能吗?
我想避免使用解决方案 1,因为我暗示我手头没有视图的代码,这将需要更多时间,另外让我们暗示我有数百个需要修改。
真的吗?
DBMS_JOB
有一个叫做CHANGE
.