select b.dj into cnt from a_rkdt a,a_rkdd b where wzlsh=:new.wzlsh and a.jssj=(select max(jssj) from a_rkdt) ;
应该是这个返回多条.
不是触发器问题,你应该确保一条返回,这样可以吗?
select distinct b.dj into cnt from a_rkdt a,a_rkdd b where wzlsh=:new.wzlsh and a.jssj=(select max(jssj) from a_rkdt) ;

解决方案 »

  1.   

    我这样写为什么不行呢?
    create or replace trigger a_lldd_Trigger_update
    before insert on a_lldd_Trigger
    for each row
    begin
      update a_lldd_Trigger set dj=
      (select distinct b.dj from a_rkdt a,a_rkdd b where a.lsh=b.rkdtlsh and wzlsh=:new.wzlsh 
      and a.jssj=(select max(jssj) from a_rkdt a,a_rkdd b where a.lsh=b.rkdtlsh and wzlsh=:new.wzlsh));
    end;
      

  2.   

    我直接执行update a_lldd_Trigger set dj=
      (select distinct b.dj from a_rkdt a,a_rkdd b where a.lsh=b.rkdtlsh and wzlsh=16268 
      and a.jssj=(select max(jssj) from a_rkdt a,a_rkdd b where a.lsh=b.rkdtlsh and wzlsh=16268))
    是可以的
      

  3.   

    表a_lldd_Trigger使用了行级触发器而成了变异表,不能在行级触发器中对自身表进行更新,只能在语句级触发器使用更新语句
    可以使用自治事务
    create or replace trigger a_lldd_Trigger_update
    before insert on a_lldd_Trigger
    for each row
    declare
      pragma autonomous_transaction;
    begin
      update a_lldd_Trigger set dj=
      (select distinct b.dj from a_rkdt a,a_rkdd b where a.lsh=b.rkdtlsh and wzlsh=:new.wzlsh 
      and a.jssj=(select max(jssj) from a_rkdt a,a_rkdd b where a.lsh=b.rkdtlsh and wzlsh=:new.wzlsh));
      commit;
    end;
      

  4.   

    To:Visual_Studio_Net(打鼠英雄)你写的我执行了,可是没有反映啊dj字段没有值的?/?
      

  5.   

    insert into a_lldd_Trigger();commit;要commit;
      

  6.   

    我这样写还是不对
    create or replace trigger a_lldd_Trigger_update1
    before insert on a_lldd_Trigger1
    for each row
    declare
      pragma autonomous_transaction;
    begin
      update a_lldd_Trigger set dj=:new.dj where wzlsh=:new.wzlsh;
      commit;
    end;create or replace trigger a_lldd_Trigger_update
    before insert on a_lldd_Trigger
    for each row
    declare
      pragma autonomous_transaction;
      cnt number;
    begin
      cnt:=0;
      select distinct b.dj into cnt from a_rkdt a,a_rkdd b where a.lsh=b.rkdtlsh and wzlsh=:new.wzlsh 
      and a.jssj=(select max(jssj) from a_rkdt a,a_rkdd b where a.lsh=b.rkdtlsh and wzlsh=:new.wzlsh);
      insert into a_lldd_Trigger1 (wzlsh,dj) values (:new.wzlsh,cnt);
      commit;
    end;
    a_lldd_Trigger和a_lldd_Trigger是两个相同结构的表
      

  7.   

    我的想法是在向a_lldd_Trigger插入值的时候向a_lldd_Trigger1插入我需要的数据。然后修改a_lldd_Trigger表中的dj值。
    可是trigger a_lldd_Trigger_update1就是不能修改a_lldd_Trigger表中的dj值。这是为什么?
      

  8.   

    我直接向a_lldd_Trigger1表插入一个值的时候触发器是执行的。
      

  9.   

    我的想法是在向a_lldd_Trigger插入值的时候向a_lldd_Trigger1插入我需要的数据。然后修改a_lldd_Trigger表中的dj值。是不是update a_lldd_Trigger 同时update a_lldd_Trigger1?
      

  10.   

    是 insert a_lldd_Trigger1的同时update a_lldd_Trigger
      

  11.   

    其实我原来的目的是想在insert a_lldd_Trigger表的wzlsh字段的同时使用触发器修改a_lldd_Trigger表的dj字段。可是我用Visual_Studio_Net(打鼠英雄)提供的触发器不能解决我的问题。所以我想变通一下的。
      

  12.   

    create or replace trigger a_lldd_Trigger_update1
    before insert on a_lldd_Trigger1
    for each row
    declare
      pragma autonomous_transaction;
    begin
      update a_lldd_Trigger set dj=:new.dj where wzlsh=:new.wzlsh;
      update a_lldd_Trigger(***);
      commit;
    end;
      

  13.   

    触发器分为语句触发器和行触发器啊...
    我修改的代码如下:
    create or replace trigger a_lldd_Trigger_update1
    after insert on a_lldd_Trigger
    for each row
    begin
      --直接写修改a_lldd_Trigger表中的dj的值就可以了
    end;
     
      

  14.   

    我解决了,要谢谢各位
    create or replace trigger a_lldd_Trigger
    before insert on a_lldd
    for each row
    declare
      pragma autonomous_transaction;
      cnt number;
    begin
      cnt:=0;
      select distinct b.dj into cnt from a_rkdt a,a_rkdd b where a.lsh=b.rkdtlsh and wzlsh=:new.wzlsh 
      and a.jssj=(select max(jssj) from a_rkdt a,a_rkdd b where a.lsh=b.rkdtlsh and wzlsh=:new.wzlsh);
      --insert into a_lldd_Trigger1 (wzlsh,dj) values (:new.wzlsh,cnt);
      
      --commit;
      --update a_lldd_Trigger set dj=cnt where wzlsh=:old.wzlsh;
      --commit;
      :new.dj:=cnt;
    end;