`
mengqingyu
  • 浏览: 329144 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

oracle定时调用存储过程

阅读更多
要求:每月24日定时抽取表mlk_flag_2012最新月份的数据作为当月的数据插入到表mlk_flag_2012中,例如,7月24号前,表mlk_flag_2012中只有1-6月份的数据,7月24号抽取6月份的数据作为7月份的初始值。

步骤:

一:创建存储过程MLK_FLAG_PROC  作用:抽取表mlk_flag最新月份的数据作为当月的数据插入。对于表不存在及无历史数据的情况都做了处理,也可以作为oracle初始化之用。
create or replace procedure MLK_FLAG_PRO_NEW as
    year_ varchar2(4); 
    create_table_ varchar2(3000); 
    insert_data_  varchar2(3000); 
    is_latest_year varchar2(100); 
    delete_sql_ varchar2(3000); 
    is_exists_sql_ varchar2(3000); 
    is_exists_ number(10); 
    username varchar(200); 
    columns_name_sql varchar(3000); 
    columns_name varchar(3000);
 
begin year_ := to_char(sysdate,'yyyy');
 --处理mlk flag  
DBMS_OUTPUT.PUT_LINE('处理mlk flag');  
select substr(max(table_name),length(max(table_name))-3,4) into is_latest_year from user_tables   where table_name like 'MLK_FLAG_%';  
--判断当年表是否存在  
--1.当年表存在  
if is_latest_year=year_ then 
    --判断当前月份是否存在数据,若存在,删除当前月份数据,然后倒入最新数据  
    is_exists_sql_ :=' select count(*)   from  MLK_FLAG_'||year_||'  where time_ =  to_char(sysdate,''yyyymm'') ';    
    execute immediate is_exists_sql_ into is_exists_;   
    if is_exists_>0 then  
        delete_sql_  :='delete from MLK_FLAG_'||year_||' where time_ =  to_char(sysdate,''yyyymm'') ';   
        execute immediate delete_sql_;   
        commit;     
    end if;   
    columns_name_sql :='select substr(max(sys_connect_by_path(NAME, '','')), 2, 10000)  columns_name  
                        from (                         
                    SELECT COLUMN_NAME as NAME, rownum ro FROM USER_TAB_COLUMNS                         
                    WHERE TABLE_NAME = ''MLK_FLAG_'||year_||''' AND COLUMN_NAME!=''TIME_''                        
                     ORDER BY COLUMN_ID                  
                ) newtab                   
                start with newtab.ro = 1                  
                connect by prior newtab.ro = newtab.ro-1';    
    DBMS_OUTPUT.PUT_LINE(columns_name_sql);   
    execute immediate columns_name_sql into columns_name;   
    DBMS_OUTPUT.PUT_LINE(columns_name);  
    insert_data_ := ' insert into MLK_FLAG_'||year_||'   
            ('||columns_name||',time_)   
            select '||columns_name||' ,to_char(sysdate,''yyyymm'')  as TIME_      
            from MLK_FLAG_'||year_||'     
            where time_=(select max(time_) from MLK_FLAG_'||year_||')' ;     
    DBMS_OUTPUT.PUT_LINE(insert_data_); execute immediate insert_data_; 
    commit; 
end if; 
--2.当年表不存在,创建当年表,并将上年的最后一个月份的数据倒入当当年表中 
select user into username from dual; 
execute immediate 'grant create table to '||username; 
if is_latest_year<year_ then 
    create_table_ := ' create table MLK_FLAG_'||year_|| ' as   
            select * from MLK_FLAG_'||is_latest_year||' where rownum<1' ; 
    execute immediate create_table_;  
    columns_name_sql :='select substr(max(sys_connect_by_path(NAME, '','')), 2, 10000)  columns_name                   
                from (                         
                    SELECT COLUMN_NAME as NAME, rownum ro FROM USER_TAB_COLUMNS                        
                    WHERE TABLE_NAME = ''MLK_FLAG_'||is_latest_year||''' AND COLUMN_NAME!=''TIME_''                         
                    ORDER BY COLUMN_ID                  
                ) newtab                  
                start with newtab.ro = 1                   
                connect by prior newtab.ro = newtab.ro-1';   
    --DBMS_OUTPUT.PUT_LINE(columns_name_sql);   
    execute immediate columns_name_sql into columns_name;   
    --DBMS_OUTPUT.PUT_LINE(columns_name); 
    insert_data_ := ' insert into MLK_FLAG_'||year_||' 
             ('||columns_name||',time_)   
            select '||columns_name||',to_char(sysdate,''yyyymm'') as TIME_ from MLK_FLAG_'||is_latest_year||' 
            where time_=(select max(time_) from MLK_FLAG_'||is_latest_year||')'; 
    Dbms_output.Put_line(insert_data_); 
    execute immediate insert_data_; 
    commit; 
end if;
end MLK_FLAG_PRO_NEW;


二:执行定时任务
declare  

   jobno number;  

 begin  

   dbms_job.submit(

     jobno,

     'MLK_FLAG_PROC;', --what

     to_date('24-07-2012 02:00:00', 'dd-mm-yyyy hh24:mi:ss'), --next_date

     ' TRUNC(LAST_DAY(SYSDATE))+24+2/24' --interval,关键设置 每月24号凌晨2点执行

  );  

 commit;  

end; 


三: 查看定时任务的详细情况

select * from user_jobs;



四:关闭定时任务

begin  dbms_job.remove(n);  end;  



n为任务号,通过三察看任务号。

五:Interval的相关设置

   1、 每分钟执行

Interval => TRUNC(sysdate,'mi') + 1 / (24*60)

Interval =>'sysdate+1/1440'

2、 每天定时执行

例如:每天的凌晨2点执行

Interval => TRUNC(sysdate) + 1 +2 / (24)

3、 每周定时执行

例如:每周一凌晨2点执行

Interval => TRUNC(next_day(sysdate,2))+2/24 --星期一,一周的第二天

4、 每月定时执行

例如:每月1日凌晨2点执行

Interval =>TRUNC(LAST_DAY(SYSDATE))+1+2/24

5、 每季度定时执行

例如每季度的第一天凌晨2点执行

Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 2/24

6、 每半年定时执行

例如:每年7月1日和1月1日凌晨2点

Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24

7、 每年定时执行

例如:每年1月1日凌晨2点执行

Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+2/24


8、 每3小时执行一次

Interval =>sysdate+180/1440'
分享到:
评论

相关推荐

    Oracle定时执行存储过程

    Oracle定时执行存储过程 Oracle定时执行存储过程

    oracle定时器调用存储过程

    oracle定时器调用存储过程

    oracle job调度存储过程 触发器 定时更新数据库

    oracle job调度存储过程 触发器 定时更新数据库

    oracle定时发送邮件

    利用oracle语言,直接引用入数据库中,通过调用存储过程的接口,就能实现发送邮件,不需要做任何更改!

    oracle数据库同步perl脚本示例

    oracle数据库同步perl脚本示例 其中有2个文件,一个是 perl同步脚本,另一个是存储过程; 大致思路是:perl脚本从数据库A同步数据至库B的临时表中,再通过存储过程将库B中的临时数据过滤导入正式数据当中。

    ORACLE之常用FAQ V1.0(整理)

    [Q]怎么设置存储过程的调用者权限 13 [Q]怎么快速获得用户下每个表或表分区的记录数 13 [Q]可以利用utl_smtp包发邮件,以下是一个发送简单邮件的例子程序 14 [Q]可以利用utl_file包,但是,在此之前,要注意设置好...

    12.系统和数据库备份、恢复策略.doc

    配置信息备份 数据库定时调用备份程序,备份当前配置信息,通过oracle定时任务,每间隔一 周备份一次,具体时间可设置,默认7天,保留最近5次备份。 2. 数据信息备份 在数据库服务器上提供了备份脚本,/home/oracle...

    Sql Server数据库自动全备份的脚本(带7z压缩)

    该工具,可设定备份哪几个数据库,是通过vbs与cmd实现,只需改一点配置就可以实现,附带了Oracle的备份

    文件自动同步数据库管理工具

    如清除系统日志,数据同步,数据备份,整理数据库空间,调用存储过程等。已测试支持Oracle、SqlServer、MySql等数据库、及Access、Excel等OleDb数据库。 文件操作任务:同步服务器上的文件,或删除服务器上的日志...

    小排骨网站采集器|通用的网页采集器

    小排骨采集器的主要功能: ※ 多任务 & 多线程:可以同时执行多个采集任务,每...※ 支持存储过程调用,可以与现有数据库进行整合,构造一个数据处理层。 ※ 支持采集结果在线发布,即以在线方式发布到现有的网站系统。

    asp.net知识库

    发布Oracle存储过程包c#代码生成工具(CodeRobot) New Folder XCodeFactory3.0完全攻略--序 XCodeFactory3.0完全攻略--基本思想 XCodeFactory3.0完全攻略--简单示例 XCodeFactory3.0完全攻略--IDBAccesser ...

    struts quartz整合示例

    项目名称:struts quartz整合示例 项目功能:web启动时,使用quartz启动所有任务。...开发环境:eclipse 3.2 + oracle 11g 发布环境:tomcate 5.5,若将其发布到weblogic中,需调整代码结构(如何调整,请网搜)。

    Activiti6.0.0最新源码

    定时器作业在新的版本存储于单独的表中,一个线程会定时轮训需要执行的作业,快到期的作业会被添加到suspended jobs表中。重试的作业已经被干掉了,需要重试的作业会被添加到deadletter jobs表中。这样的重构意义...

    php网络开发完全手册

    16.3.2 存储过程的创建与调用 264 16.3.3 存储过程的参数 265 16.3.4 复合语句 267 16.3.5 变量 268 16.3.6 条件语句 269 16.3.7 循环语句 271 16.3.8 游标 273 16.3.9 存储过程的删除 275 16.4 触发器的设计 275 ...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例244 将文本文件中数据存储到数据库中 316 4.5 文件的压缩与解压 318 实例245 PHP中压缩RAR文件 319 实例246 PHP中将上传文件转换成RAR文件 320 实例247 PHP中对RAR文件进行解压 321 实例248 PHP中压缩ZIP文件 ...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例244 将文本文件中数据存储到数据库中 316 4.5 文件的压缩与解压 318 实例245 PHP中压缩RAR文件 319 实例246 PHP中将上传文件转换成RAR文件 320 实例247 PHP中对RAR文件进行解压 321 实例248 PHP中压缩ZIP文件 ...

    C#.net_经典编程例子400个

    mid-wav文件 226 实例154 获取多媒体详细信息列表 227 5.2 MP3、WAV播放 228 实例155 带记忆功能的MP3播放器 228 实例156 自动播放的MP3播放器 231 实例157 学校体操定时音乐播放 233 ...

    Visual C++程序开发范例宝典(光盘) 第四部分

    实例222 调用具有输出参数的存储过程 8.8 数据库结构的读取与修改 实例223 读取Access数据库结构 实例224 读取SQL Server数据库结构 8.9 图片、多媒体数据录入技术 实例225 对Access数据库进行录入和提取图片 ...

    Visual C++程序开发范例宝典(光盘) 第八部分

    实例222 调用具有输出参数的存储过程 8.8 数据库结构的读取与修改 实例223 读取Access数据库结构 实例224 读取SQL Server数据库结构 8.9 图片、多媒体数据录入技术 实例225 对Access数据库进行录入和提取图片 ...

Global site tag (gtag.js) - Google Analytics