在oracle数据库中,可以通过创建dbms作业的方式进行定时存储过程的调用,但是如何创建呢?虽然网上有一些资料,但是语法还是比较'奇葩',试了很多遍才弄好,具体情况看图片就可以了。
输入要在作业中运行的plsql :procedure_statistic_result; /*****(存储过程名称,多个可以用分号隔开,本例只有一个)*****/
开始日期:trunc(sysdate) + 22/24;/*本日的22点运行第一次*/
下一日期:trunc(sysdate) + 22/24+1;//下一个日期的22点运行
oracel 存储过程:
create or replace
PROCEDURE PROCEDURE_STATISTIC_RESULT AS
result varchar2(100);--执行结果
v_count integer := 0;
v_rownum integer := 0;
cursor sdyz_cursor is select w.shengdaoyuzhong,count(w.movie_id) as moviecount from v_programlayer_sdyz w , movie b where w.movie_id = b.movie_id group by w.shengdaoyuzhong;
cursor zmyz_cursor is select w.zimuyuzhong,count(w.movie_id) as moviecount from v_programlayer_zmyz w , movie b where w.movie_id = b.movie_id group by w.zimuyuzhong;
BEGIN
/**--------------------------声道语种统计----------------------------**/
select count (1) into v_count from T_RESULT_STATISTIC t where t.resulttype = 'shengdaoyuzhong';
IF v_count > 0 THEN
delete from T_RESULT_STATISTIC t where t.resulttype = 'shengdaoyuzhong';
END IF ;
FOR sdyz IN sdyz_cursor LOOP
insert into T_RESULT_STATISTIC (id,createdate,moviecount,yuzhong,resulttype) values (sys_guid(),sysdate,sdyz.moviecount,sdyz.shengdaoyuzhong,'shengdaoyuzhong');
v_rownum := v_rownum+1;
if mod(v_rownum,500) = 0 then
commit;
end if;
END LOOP ;
/**-----------------------字幕语种统计-----------------------**/
select count(1) into v_count from T_RESULT_STATISTIC t where t.resulttype = 'zimuyuzhong';
IF v_count > 0 THEN
delete from T_RESULT_STATISTIC t where t.resulttype = 'zimuyuzhong';
END IF ;
v_rownum := 0;
FOR zmyz IN zmyz_cursor
LOOP
insert into T_RESULT_STATISTIC (id,createdate,moviecount,yuzhong,resulttype) values (sys_guid(),sysdate,zmyz.moviecount,zmyz.zimuyuzhong,'zimuyuzhong');
v_rownum := v_rownum+1;
if mod(v_rownum,500) = 0 then
commit;
end if;
END LOOP ;
if v_rownum >0 then
commit;
end if;
result := 'success';
dbms_output.put_line(result);
exception
when others then
result := 'error';
dbms_output.put_line(result);
END PROCEDURE_STATISTIC_RESULT;