after 改为 before 试验一下
当然 也不能用子查询了

解决方案 »

  1.   

    insert into personalinsurancedate(personalid,insuranceid) select a.idcard,b.oid from personal a,insurance b where a.gongzhong=b.typeworkid  and a.idcard=:new.idcard;
    personal  不能在对起进行查询
    要先将内容取出后
    用INSERT TABLE ——NAME 
    VALUES(,,,,) 
    进行     
      

  2.   

    可以将insert语句改为:
       insert into personalinsurancedate(personalid,insuranceid) 
       select :new.idcard,b.oid from  insurance b 
       where b.typeworkid=:new.gongzhong ;
    去掉对personal表的引用. 看看结果是否满足你的要求。
      

  3.   

    create or replace trigger update_company
    before update on personal 
    for each row
    begin
     if :new.company<>:old.company
     then
       insert into personalinsurancedate(personalid,insuranceid) select a.idcard,b.oid from personal a,insurance b where a.gongzhong=b.typeworkid  and a.idcard=:new.idcard;
     end if;
     end update_company;