我想用oracle触发器做一个定时触发 但是不知道怎么写 请各位大哥帮帮忙啊 具体如下我现在有一个表,我想在某一天比如8月8号让它对我表中的某列数据自动+1,问题是如何让oracle在8月8日这一天执行这个触发过程,大家都帮忙想一下啊 ,留下你们的思路,谢了~~·

解决方案 »

  1.   

    你先写个存储过程
    CREATE OR REPLACE PROCEDURE update_table
    IS
    BEGIN
       UPDATE a
          SET a.a=a.a+1;   COMMIT;
    EXCEPTION
       WHEN NO_DATA_FOUND
       THEN
          NULL;
       WHEN OTHERS
       THEN
          -- Consider logging the error and then re-raise
          RAISE;
    END update_table;然后再建个JOB
    DECLARE
      X NUMBER;
    BEGIN
      SYS.DBMS_JOB.SUBMIT
      ( job       => X 
       ,what      => 'update_table;'
       ,next_date => to_date('08/08/2008 00:00:00','dd/mm/yyyy hh24:mi:ss')
       ,no_parse  => FALSE
      );
      SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
    COMMIT;
    END;
    8月8号这天会自动执行的
      

  2.   

    数据库维护一组job,每个job可以调用数据库中存储过程或函数方法
    这样就可以定时执行啦。在存储过程中进行逻辑处理。
      

  3.   

    CREATE OR REPLACE PROCEDURE update_table
    IS
    BEGIN
       UPDATE a
          SET a.a=a.a+1;   COMMIT;
    EXCEPTION
       WHEN NO_DATA_FOUND
       THEN
          NULL;
       WHEN OTHERS
       THEN
          -- Consider logging the error and then re-raise
          RAISE;
    END update_table;learning...
      

  4.   

    先定义一个cursor的ref变量
    然后open cur for str。
    事先这个str整理好就行了。
    如何处理v_strTrueSendNo呢?
    直接替换,-〉','
    方法'''' || replace(v_strTrueSendNo,',',''',''') || ''''
    给个例子
    CREATE OR REPLACE PROCEDURE CURNAME
    IS
    aaa sys_refcursor;
    str varchar2(4000);
    vp varchar2(4000);
    BEGIN
      vp :='12345,67890';
      vp :='''' || replace(vp,',',''',''') || '''';
      str := 'select to_char(sysdate,''YYYYMMDD'') from dual where ''67890'' in(' || vp || ')';
      open aaa for str;
      fetch aaa into vp;
      close aaa;
      dbms_output.put_line(vp);
    END;