利用触发器来触发一个PROCEDURE,
把修改数据的动作写在PROCEDURE来完成,
如果写入的字表被删掉了,或是其他问题发生了,
在PROCEDURE后面加入
exception
when no_data_found then
null ;
WHEN OTHERS THEN
NULL ;
这样就可以处理你遇到的情况了。
当然这样效率也许有些受到影响。

解决方案 »

  1.   

    create trigger name_tri 
    before insert or update on 主表
    for each row
    declare
    num number;
    begin
    select count(1) into num from user_table where table_name='子表';
    if num>0 then
    update 子表 set col1_name=:new.col1_name,..... where id=:new.id;
    end if;
    end;
    /
      

  2.   

    把对子表的操作用动态SQL完成。
    create trigger name_tri 
    before insert or update on Ö÷±í
    for each row
    declare
    num number;
    sql_str varchar(1000);
    begin
      select count(1) into num from user_table where table_name='子表';
      if num>0 then
        sql_str := 'update 子表 set col1_name='||:new.col1_name||' where id='||:new.id;
        execute immediate sql_str;
      end if;
    end;
    /