Quero agendar função no Oracle.
begin
dbms_scheduler.create_job(job_name => 'aud_clear',
job_type => 'PLSQL_BLOCK',
job_action => 'aud_clear_fun',
start_date => sysdate,
repeat_interval => 'freq=daily; byminute=0; bysecond=0',
end_date => null,
enabled => true,
comments => 'Created By: MK; Truncates aud$ table');
end;
Já tentei indicar vários outros valores para job_action, por exemplo:
declare
my_var number;
begin
select aud_clear_fun into my_var from dual;
end;
Mas não funciona. Você pode me fornecer a sintaxe correta da função de agendamento?
Obrigada.
--aud_clear_fun
create or replace function aud_clear_fun
return number is
begin
delete from a;
return 0;
end;
--Trabalho
begin
dbms_scheduler.create_job(job_name => 'aud_clear',
job_type => 'PLSQL_BLOCK',
job_action => 'begin
mari_dba.aud_clear_fun();
end;',
start_date => sysdate,
end_date => NULL,
repeat_interval => 'freq=daily; byminute=0; bysecond=0',
enabled => true);
end;
--Execução
begin
dbms_scheduler.run_job('aud_clear');
end;
--Erro
ORA-06550: line 2, column 50:
PLS-00221: 'AUD_CLEAR_FUN' is not a procedure or is undefined
ORA-06550: line 2, column 50:
PL/SQL: Statement ignored
ORA-06512: at "SYS.DBMS_ISCHED", line 185
ORA-06512: at "SYS.DBMS_SCHEDULER", line 486
ORA-06512: at line 2
View program sources of error stack?
A mensagem de erro é bem clara, você precisa especificar um procedimento ou um bloco pl/sql válido. Se você realmente deseja truncar a tabela aud$ de um pedaço de pl/sql, você precisará usar SQL dinâmico.
coloque o código na action ou na definição da procedure aud_clear_fun, que realmente precisa ser uma procedure para funcionar com o Oracle Scheduler. O Scheduler não vai ler o valor retornado...
Coloque o
job_action
inline, da seguinte forma: