should_finish_time 中有一个时间,如果当系统时间等于should_finish_time 中的时间,s_c_time 中的值等于空,scope中的值为1或2 的时候,把系统时间写入s_c_time 中,如果当系统时间等于should_finish_time 中的时间,s_c_time 中的值等于空,scope中的值为3 的时间,把系统时间写入s_c_time 中,并修改另一个表中一个字段的一个值。如果s_c_time 中的值不等于空,就不做任何修改。
谢谢!

解决方案 »

  1.   

    不太清楚,能说的具体一点么,我理解是如果should_finish_time的时间等于系统时间,且s_c_time的值为空,scope中的值为1或2 的时候 ,那么把s_c_time 时间写入当前系统时间,
    scope中的值为3和为1,2时有区别么?
      

  2.   

    CREATE OR REPLACE TRIGGER Wfes_supervise_trigger
    AFTER INSERT 
        ON Wfes_supervise FOR EACH ROW
    DECLARE  s_id_tem  number;
      BEGIN
        s_id_tem := 0;
        
        SELECT s_id INTO s_id_tem FROM Wfes_supervise where /*should_finish_time = SYSDATE AND*/ s_c_time is null AND
        "scope" IN (1,2);
       
        UPDATE  Wfes_supervise  SET s_c_time = SYSDATE  WHERE  s_id = s_id_tem;
        COMMIT;
        
        Exception
            when Others then
            BEGIN
               return;
            END;
      END;
      

  3.   

    SELECT s_id INTO s_id_tem FROM Wfes_supervise where /*should_finish_time = SYSDATE AND*/ s_c_time is null AND
        "scope" IN (1,2);
       
        UPDATE  Wfes_supervise  SET s_c_time = SYSDATE  WHERE  s_id = s_id_tem;
        COMMIT;
    这个Update前面不需要判断吗??
      

  4.   

    scope中的值只是一个标志,说明此督察(这个表叫督察表)是针对整个项目“3”和是对项目中的一个环节“2”或是针对一个办理人“1”。只有对整个项目“3”的时候,除了把系统时间写到s_c_time 中外,还会修改wfes_project(项目表)中p_state(字段:项目状态)改为“1”(办理中),但是前提条件是wfes_project(项目表)中p_state(字段:项目状态)为“31”(延期)
      

  5.   

    不好意思,我的表达可能有些问题。我从新说一下。
    Wfes_supervise (督察表),记录督察信息。wfes_project(项目表)记录项目信息。
    督察表中should_finish_time(Wfes_supervise字段:应该结束时间、时间类型)的值只有在type(Wfes_supervise字段:督察类型)值为31(延期)的时候才会有,其他督察类型的时候为空。
       当should_finish_time里有值得时候(里面的时间一定大于数据插入时的时间),只要系统时间等于这个时间,s_c_time(Wfes_supervise字段:督察结束时间)的值不等于空,scope(Wfes_supervise字段:督察范围)值为1或着2的时候,就把系统时间写入s_c_time中。
       当should_finish_time里有值得时候(里面的时间一定大于数据插入时的时间),只要系统时间等于这个时间,s_c_time(Wfes_supervise字段:督察结束时间)的值不等于空,scope(Wfes_supervise字段:督察范围)值为3的时候,就把系统时间写入s_c_time中,并判断wfes_project(项目表)中的p_state(字段:项目状态),如果p_state等于31,就把p_state改为1。
      

  6.   

    if (Wfes_supervise.s_c_time==null && Wfes_supervise.should_finish_time==sysdate) 
    {
        if(Wfes_supervise.scope==3 && wfes_project.p_state==31) 
        {
          update wfes_project set p_state=1;
        }
        update Wfes_supervise set s_c_time=sysdate;

      

  7.   

    也就是说只要Wfes_supervise.s_c_time==null以及Wfes_supervise.should_finish_time==sysdate
    就会触发
    update Wfes_supervise set s_c_time=sysdate;
    如果Wfes_supervise.scope==3 && wfes_project.p_state==31
    还会触发
    update wfes_project set p_state=1;
      

  8.   

    你好问题解决了没有啊,我查资料了,好象触发器不允许更新本表,而且也不能执行dml语言,比如commit,你可以再建一个同样的表,更新本表时,插入另一个表,然后那个表再建一个trigger互相更新.
      

  9.   

    --------------------------------------------------------------
    您好,我们是“2006中国杰出数据库工程师评选”活动组委会。
    您的帖子已经被我们转载到本次评选官方网站的“专家在线答疑”区。
    http://www.bestdba.cn/match_discussion.aspx在那里,进入本次评选终选的30位数据库工程师将与您展开积极的互动。他们会为您的问题提供满意的答案,此外,您还可以在“专家在线答疑”区提出新的问题并参与讨论。您的帖子位于:
    http://www.bestdba.cn/match_discussion3.aspx?pointid=449&pointid2=1&pointid3=5&pcount=stc非常感谢您对本次活动的支持!
    --------------------------------------------------------------
      

  10.   

    up up 
    花花另加100分
      

  11.   

    建一个同样的表,更新本表时,插入另一个表,然后那个表再建一个trigger互相更新