首页 > 代码库 > 小循环的妙用
小循环的妙用
需求:
要求生成5月14号功能上线到6月7号之间优化上线之间的数据,稍微修改了一下proc_search_log过程,
输入参数t_date,写了一个小循环,执行时间62s多,尚可。因为oracle写数据比更新数据快很多,过程里全部是写数据;
declare
temp_date date:=trunc(sysdate-2) ;
begin
loop
exit when temp_date<=to_date(‘20100513‘,‘yyyymmdd‘);
EXECUTE IMMEDIATE ‘BEGIN PROC_SEARCH_LOG(:v1); END;‘
USING IN temp_date;
temp_date:=temp_date-1;
end loop;
exception
when others then
rollback;
raise_application_error(-20666,substr(sqlerrm,1,200));
end;
-----------------------------------分割线-------------------------------------
不晓得上次 依然是博腕数据的过程 我为毛一天一天手工执行 应该也写一个循环的。
②调整job时间:
CREATE OR REPLACE PROCEDURE EDU.PROC_CHANGE_JOBTIME
AS
TYPE CUR_TYPE IS REF CURSOR;
CUR CUR_TYPE;
T_JOB NUMBER;
T_NEXT_DATE DATE;
BEGIN
OPEN CUR FOR
SELECT D.JOB,D.NEXT_DATE
FROM USER_JOBS D
WHERE TRUNC(D.NEXT_DATE)=ADD_MONTHS(TRUNC(SYSDATE,‘MM‘),1)
AND D.LOG_USER=‘EDU‘;
LOOP
FETCH CUR INTO T_JOB,T_NEXT_DATE;
EXIT WHEN CUR%NOTFOUND;
DBMS_JOB.NEXT_DATE(T_JOB,T_NEXT_DATE+3/144);
COMMIT;
END LOOP;
CLOSE CUR;
END;
/
begin
dbms_job.isubmit(70,‘EDU.PROC_CHANGE_JOBTIME;‘,trunc(last_day(sysdate))+10/24+3/144,‘trunc(last_day(add_months(sysdate,1)))+10/24+3/144‘);
end;
小循环的妙用