我想在 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;
我试图为 job_action 指明其他几个值,例如:
declare
my_var number;
begin
select aud_clear_fun into my_var from dual;
end;
但不起作用。你能给我提供调度函数的正确语法吗?
谢谢你。
--aud_clear_fun
create or replace function aud_clear_fun
return number is
begin
delete from a;
return 0;
end;
- 工作
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;
- 执行
begin
dbms_scheduler.run_job('aud_clear');
end;
- 错误
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?
错误信息很清楚,你需要指定一个过程或者一个有效的pl/sql块。如果你真的想从一段 pl/sql 中截断 aud$ 表,你将需要使用动态 SQL。
将代码放在 aud_clear_fun 的操作或过程定义中,这确实需要是一个与 Oracle 调度程序一起工作的过程。调度程序不会读取返回值...
放入
job_action
内联,如下: