代码:-- 官方公告审核 触发器create or replace trigger forum_aduit
after insert
on easyw.forum_official_announcement 
for each row
begin
   update easyw.audit_noaudit_stat t set t.amount = t.amount + 1 where t.class_id = 10001;
 end;
上述代码可以正常运行。但是现在要在easyw.forum_official_announcement  这个表中加一个状态位来判断  是否更新
如果是0 才更新。。 请教如何实现判断部分

解决方案 »

  1.   

    if :new.状态字段=0 then
       update easyw.audit_noaudit_stat t set t.amount = t.amount + 1 where t.class_id = 10001;
     end if;
      

  2.   

     
    create or replace trigger forum_aduit
    after insert
    on easyw.forum_official_announcement  
    for each row
    begin
    if :new.字段<>:old.字段 then
      update easyw.audit_noaudit_stat t set t.amount = t.amount + 1 where t.class_id = 10001;
    else
    null;
    end if;
     end;
      

  3.   

    楼上的2位朋友 :new.字段 出来不了的吧
      

  4.   

    感觉要用:old.status=0 then 这样更好
      

  5.   

    错了 是insert 没有:old 
      

  6.   

    应该可以啊.SQL> create table test_tri
      2  (id number(10),
      3   name varchar2(10),
      4   state number(10));
     
    Table created
     
    SQL> 
    SQL> create table test_tri2
      2  (id number(10),
      3   name varchar2(10),
      4   state number(10));
     
    Table created
     
    SQL> 
    SQL> create or replace trigger tr_test
      2    after insert on test_tri
      3    for each row
      4  declare
      5    -- local variables here
      6  begin
      7    if :new.state=0 then
      8       insert into test_tri2 values(:new.id,:new.name,1);
      9    end if;
     10  end tr_test;
     11  /
     
    Trigger created
     
    SQL> insert into test_tri values(1,'test',0);
     
    1 row inserted
      
    SQL> commit;
     
    Commit complete
     
    SQL> select * from test_tri2;
     
             ID NAME             STATE
    ----------- ---------- -----------
              1 test                 1
     
    SQL> 
      

  7.   


    create or replace trigger forum_aduit
    after insert on easyw.forum_official_announcement 
    for each row
    when (new.status=0)
    begin
      update easyw.audit_noaudit_stat t set t.amount = t.amount + 1 where t.class_id = 10001;
    end;
    /
      

  8.   


    create or replace trigger forum_aduit
    before insert on forum_official_announcement for each row
    declare  
    v_state forum_official_announcement.state%type;
    begin
         v_state:=:new.state;
         if v_state=0 then
            update audit_noaudit_stat t set t.amount = t.amount + 1  where t.class_id = 10001;
        end if;
     end
      

  9.   

    代码:-- 官方公告审核 触发器create or replace trigger forum_aduit
    after insert
    on easyw.forum_official_announcement  
    for each row
    begin
      update easyw.audit_noaudit_stat t set t.amount = t.amount + 1 where t.class_id = 10001;
     end;最后在:new一直报错的情况下  我这样写的 修改代码如下:
    代码:-- 官方公告审核 触发器create or replace trigger forum_aduit
    after insert
    on easyw.forum_official_announcement  
    for each row
    when(:new.state = 0)
    begin
      update easyw.audit_noaudit_stat t set t.amount = t.amount + 1 where t.class_id = 10001;
     end;
      

  10.   

    比较好的方法是:
    insert a  where not exists(select  1 from b where a.col = b.col)
    update a set a.col = value where exists(select 1 from b where a.col = b.col)
    如果表上有索引,效率非常高,数据量较大时,别用in