本帖最后由 bye9bye 于 2009-09-28 14:39:19 编辑

解决方案 »

  1.   

    一个很少见的需求,为什么要延时20分钟啊
    没想到什么好办法,定时的任务可以用job,将触发器和job结合来做,可是只需要执行一次,还要手工停止,这个很麻烦
    或者再加一个字段,储存修改时间,假设这个字段名为updatetime
    然后设置一个job:
    每20分钟执行一次,查询表中updatetime<sysdate-20/24/60不为空,且flag为0的值,将这些记录的flag修改为1
      

  2.   

    dbms_lock.sleep(no-of-seconds);   
      

  3.   

    说错了,是查询表中updatetime<sysdate-20/24/60,且flag为1的记录,将这些记录的flag修改为0
      

  4.   

    DBMS_LOCK.SLEEP(7*24*60*60);  --七天
    按这种写法,大约不到半个小时Sleep就结束了.
        
    只好改成下面的写法.     
    for I in 1 .. 7 * 24 * 60 loop
       DBMS_LOCK.SLEEP(60);
    end loop;查了查SYS.DBMS_LOCK的包,只有很简短的说明
      procedure sleep(seconds in number);
      --  Suspend the session for the specified period of time.
      --  Input parameters:
      --    seconds
      --      In seconds, currently the maximum resolution is in hundreths of
      --      a second (e.g., 1.00, 1.01, .99 are all legal and distinct values).
      

  5.   

    那个字段是一个开关变量,延时20分钟是给客户这么多时间的。触发器是针对某一条记录的。修改也是针对这条记录的。记录1在9:00的时候flag改为1,那记录1就要在9:20的时候flag字段改为0
    这中间记录2在9:12分的时候flag改为1,那记录2要在9:32的时候将来flag字段改为0
      

  6.   

    你的是什么数据库?ORACLE?还有,目前只有行触发器,自己去实现一下吧
      

  7.   

    create or replace trigger trg_test
     after update on  mytable 
      for each row
    begin
      if :new.flag=1 then
          DBMS_LOCK.SLEEP(1200); 
         :new.flag:=0;
      end if;
    end trg_test;
    试试
      

  8.   


    数据库是oracle的。有人帮忙写一下这个触发器吗?我之前都没接触过