create trigger orderupdate
       before update on orderform_list for each row
 begin 
       update orderform  set diaodu=1  
       from orderform a,deleted d,inserted i
       where a.orderform_id=d.orderform_id
 end
       orderupdatecreate trigger orderdelete 
 before delete on orderform_list
 for each row
begin
 delete orderform
  from orderform a,deleted b
  where a.orderform_id=b.orderform_id
 end
  orderform_list
我写的2 个触发器都有错误,但我不知道怎么改,哪位高手能够指点一下。 其中我的orderform_list和orderform表中都有diaodu这项,我想改orderform_list中的diaodu,然后通过触发器将orderform里的diaodu也改为1。第二个是,我想删除orderform_list中diaodu为1的一行数据,同时通过触发器也把orderform里diaodu为1的那一行数据删除!

解决方案 »

  1.   


    把before update on 换成 after update on试试吧!
      

  2.   

    我之前用的after 后来改用的before.刚才我又试了一次 还是出现同样错误
      

  3.   

    请问这是oracle语法吗,deleted,inserted是server sql的,用old和new
      

  4.   

    --改一下试试
    CREATE TRIGGER orderupdate
      BEFORE UPDATE ON orderform_list
      FOR EACH ROW
    BEGIN
      UPDATE orderform
         SET diaodu = 1 FROM orderform a
       WHERE a.orderform_id = :new.orderform_id;
    END orderupdate;
    /
    CREATE TRIGGER orderdelete
      BEFORE DELETE ON orderform_list
      FOR EACH ROW
    BEGIN
      DELETE orderform FROM orderform a
       WHERE a.orderform_id = :old.orderform_id;
    END orderdelete;
    /
      

  5.   

    我用的是oracle10G ,是就把deleted 和 inserted 换成old和new?
    触发器是我今天新学的,不太了解
      

  6.   

    回复#4
       用了,但还是那样,我说下我是怎么用的,看看是不是我用的方法错了。
       我点击调度直接运行"update orderform_list set diaodu=1 where orderform_id=" + id;语句
       然后又运行"delete orderform_list  where diaodu=1"
       这样运行2条语句能通过触发器完成我所想实现的功能吗?
      

  7.   

    4楼的应该可以啊  你说的还是那样 是什么意思 报错还是什么
    你直接对orderform_list执行update和delete就会触发触发器执行啊
    你可以通过执行后查看各表格里的数据 看触发器是否执行正确
      

  8.   

    就是说trigger还没建好咯
    把4楼的代码拷下来 直接放到一个command window 下酒可以了啊
    或是分作两段  去掉 /  一个一个手工执行
      

  9.   

    我知道了 在My objects 里Triggers中查看我的触发器,执行4楼的语句出的是红叉,触发器没有通过验证应该是这个毛病
    create or replace trigger orderform_update_trig
      before update on orderform_list  
      for each row
    declare
      -- local variables here
    begin
      update orderform 
         set diaodu=:new.diaodu
       where orderform_id = :new.orderform_id;
    end orderform_update_trig;
    又写了一个这个,好使了,没红叉。