是这样的触发器:我的触发器实现在删除回帖表中的回帖时,将该回帖对应的主题帖的最新回复时间修改为该主题帖在回帖表中剩余回帖的最晚时间。回帖表(reply)
名称            类型            含义                  说明
REPLYID         NUMBER          回帖ID          主键
CONTENT         NVARCHAR2(1000) 回帖内容          非空
PUBDATE         DATE            回帖时间
USERID          NUMBER          用户ID          prouser表的外键
PARENTID        NUMBER          父帖子的ID      article表的外键主题帖表(article)
名称            类型            含义            说明
ARTICLEID       NUMBER          文章ID          主键
TITLE           NVARCHAR2(64)   发帖标题        
CONTENT         NVARCHAR2(1000) 发帖内容        非空
USERID          NUMBER          用户ID          prouser表的外键
PUBDATE         DATE            发帖时间
REPLYDATE       DATE            最新回复时间
MODULEID        NUMBER          版块ID          module表的外键 我的触发器代码如下:
create or replace trigger deleteReply
after delete on reply for each row
begin
 update article
 set replydate=
(select max(pubdate)
 from reply
 where reply.parentid=:old.parentid)
where articleid=:old.parentid;
看了半天看出是哪里问题了。是我的max和for each row相矛盾了,可是我不知道如何改,不知在for each row 情况下如何求出
主题帖对应reply表在回帖删除后所有回帖的最晚时间??求大家帮帮我啊!!

解决方案 »

  1.   

    update   article 
      set   replydate= 
    (select   max(pubdate) 
      from   reply 
      where   reply.parentid=:old.parentid) 
    where   articleid=:old.parentid; 一句语句里出现两个WHERE?
    是贴错了?还是原始就写错了
      

  2.   

    没看仔细,括号没看到
    UPDATE语句应该没问题,最多也就是值取错掉不过你有了begin却没有end,编译不会通过的
      

  3.   

    create or replace trigger deleteReply
    after delete on reply for each row
    begin
     update article
     set replydate=
    (
     select max(pubdate)
     from reply
     where reply.parentid=:old.parentid
    )
    where articleid=:old.parentid;
    end deleteReply;
    那个end我忘贴出来了,编译通过了,可是在执行触发器的时候出现了错误
      

  4.   

    max和for   each   row应该没什么关系吧!!
    for   each   row表示创建是的行级触发器,max是一个函数!
    楼上的语句好像看不出有什么错误?不知道执行时提示什么错误?