• oracle job


    1、创建一张表g_test
    create table G_TEST
    (
    ID NUMBER(12),
    C_DATE DATE
    )
    2、创建一个sequence
    create sequence G_SEQ
    minvalue 1
    maxvalue 1024
    start with 141
    increment by 1
    cache 20;
    3、创建一个存储过程
    create or replace procedure prc_g_test is
    begin
    insert into g_test values(g_seq.nextval,sysdate);
    end prc_g_test;

    variable job1 number;
    begin
    dbms_job.submit(job => :job1,
    what => 'prc_g_test;',
    next_date => trunc(sysdate, 'mi') - ,
    interval => 'sysdate + 6/24');
    commit;
    end;
    创建JOB
      SQL> variable job1 number;
      SQL> begin
       2 dbms_job.submit(:job1,'MYPROC;',sysdate,'sysdate+1/1440');  --每天1440分钟,即一分钟运行test过程一次
       3 end;
       4 /
     运行JOB
      SQL> begin
       2 dbms_job.run(:job1);
       3 end;
       4 /
      删除JOB
      SQL> begin
       2 dbms_job.remove(:job1);
       3 end;
       4 /
    查看相关job信息
    1、相关视图
    dba_jobs
    all_jobs
    user_jobs
    dba_jobs_running 包含正在运行job相关信息。
    如:
    select * from dba_jobs
    select * from dba_jobs 所有的JOB
    select * from dba_jobs_running 正在运行的

    --只是建立ta表,与emp表结构相同,并不添加数据
    --这种构造与现存表相同结构的表,是不会将comment带过来的
    create table ta as select * from scott.emp where 1=0;


    --建立tb表,结构与dept结构相同,将dept表中的数据导入其中
    --这种构造与现存表相同结构的表,是不会将comment带过来的:
    create table tb as select * from scott.dept where 1=1;

    在oracle中怎么将查询到的数据插入到另一个表中
    Insert into t_tab
    select * from s_tab where 条件

    改正为:update tab1 set val=(select val from tab2 where tab1.id=tab2.id)
    where exists (select 1 from tab2 where tab1.id=tab2.id)
    但是如果tab2中有多条对应tab1中一条的情况也会出错.
    最好的方法是用merge语法:
    merge into tab1
    using tab2
    on(tab1.id=tab2.id)
    when matched then
    update set tab1.val = tab2.val
    表1 一些简单的interval参数设置例子

    描述
    Interval参数值
    每天运行一次
    'SYSDATE + 1'
    每小时运行一次
    'SYSDATE + 1/24'
    每10分钟运行一次
    'SYSDATE + 10/(60*24)'
    每30秒运行一次
    'SYSDATE + 30/(60*24*60)'
    每隔一星期运行一次
    'SYSDATE + 7'
    不再运行该任务并删除它
    NULL

    表1所示的任务间隔表达式不能保证任务的下一次运行时间在一个特定的日期或者时间,仅仅能够指定一个任务两次运行之间的时间间隔。例如,如果一个任务第一次运行是在凌晨12点,interval指定为'SYSDATE+ 1',则该任务将被计划在第二天的凌晨12点执行。但是,如果某用户在下午4点手工(DBMS_JOB.RUN)执行了该任务,那么该任务将被重新定时到第二天的下午4点。还有一个可能的原因是如果数据库关闭或者说任务队列非常的忙以至于任务不能在计划的那个时间点准时执行。在这种情况下,任务将试图尽快运行,也就是说只要数据库一打开或者是任务队列不忙就开始执行,但是这时,运行时间已经从原来的提交时间漂移到了后来真正的运行时间。这种下一次运行时间的不断“漂移”是采用简单时间间隔表达式的典型特征。
    第二种调度任务需求相对于第一种就需要更复杂的时间间隔(interval)表达式,表2是一些要求在特定的时间运行任务的interval设置例子。

    表2. 定时到特定日期或时间的任务例子

    描述
    INTERVAL参数值
    每天午夜12点
    'TRUNC(SYSDATE + 1)'
    每天早上8点30分
    'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'
    每星期二中午12点
    'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'
    每个月第一天的午夜12点
    'TRUNC(LAST_DAY(SYSDATE ) + 1)'
    每个季度最后一天的晚上11点
    'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24'
    每星期六和日早上6点10分
    'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)'

  • 相关阅读:
    ISAPI Extension和ISAPI Filter
    Windows Debugging之二
    Windows Debugging之三
    举例一些可执行文件的后缀名
    Windows Debugging 之一
    [转]C# 日期函数
    在DataGridView中的CellEndEdit事件中删除当前行报错
    一个奇怪的问题
    [转载]如何发送和接收 Windows Phone 的 Toast 通知
    【转载】如何播放 Windows Phone 的后台音频
  • 原文地址:https://www.cnblogs.com/klxll/p/3158929.html
Copyright © 2020-2023  润新知