orale创建任务过程(Job)
?
?第一步:创要定时执行的存储过程(plsql中执行即可) ?
create or replace procedure p_rebuild_all_index
as
sqlt varchar(1000);
tablespace_name varchar(1000);
v_sucess varchar(1000);
begin
tablespace_name:='TYBOOKDB';
v_sucess:='重建成功';
for idx in (select index_name, tablespace_name, status,table_name from user_indexes where upper(tablespace_name)=upper(tablespace_name) and status='VALID' and temporary = 'N' and index_type='NORMAL') loop
begin
sqlt := 'alter index ' || idx.index_name || ' rebuild ';
dbms_output.put_line('表名:'||idx.table_name);
dbms_output.put_line('索引名称:'||idx.index_name);
dbms_output.put_line('执行语句:'||sqlt);
EXECUTE IMMEDIATE sqlt;
--错误后循环继续执行。
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(SQLERRM);
v_sucess:='重建失败';
end;
end loop;
--写日志,成功或失败
insert into t_tybook_back_log
( user_loginname, login_date, oper_type, oper_date, oper_des, oper_code, model_name)
values
( 'oracle_job', sysdate, '重建索引任务', sysdate, v_sucess, '', '');
end;
?
?
?第二步:通过PL/SQL创建JOB,约定每天早上2:00执行此存储过程
?
declare job number;
begin
sys.dbms_job.submit(job ,'p_rebuild_all_index;',to_date('18-10-2012 02:00:00', 'dd-mm-yyyy hh24:mi:ss') ,'sysdate+1');
end;
?
第三步:启动JOB任务
begin
exec dbms_job.run(:job1);
end;
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?