Estou usando um trabalho para atualizar uma visão materializada.
Descobri que o trabalho se bloquearia se exec dbms_refresh.refresh(''"<schema>"."<materialized_view_name>"'');
não fosse confirmado e gostaria de alterar a coluna "o que" do trabalho para incluir um commit.
Eu enfrento duas soluções possíveis:
solução 1: uma maneira mais complicada é recriar totalmente o trabalho, o que gostaria de evitar
CorreSYS.DBMS_JOB.REMOVE(14133); COMMIT;
Recrie todo o trabalho para incluir agora o 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;
/
solução 2: atualize a visão DBA_JOBS diretamente executando uma instrução de atualização normal na visão
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>');
Existe uma solução melhor do que essas duas, a solução dois é possível?
Eu gostaria de evitar a solução 1, pois vamos sugerir que não tenho o código para a exibição em mãos, isso levaria mais tempo e, além disso, vamos sugerir que tenho centenas para modificar.
Sério?
DBMS_JOB
tem um procedimento chamadoCHANGE
.