在线等,急求解!我有两张表,A表 和 B表,A表和B表都有一个parentid字段,表示父级ID,现在我写一个触发器(建在A表上)当对A表做增,删,改时分别对相应的数据在B表做同步触发,A表和B表只有NAME字段是一样的,当我向A表插入数据时,肯定要根据A表的parentid来找到A表parentid.name,然后才能找到B表对应的name,进而找到B表对应的id,这样往B表插入数据的时候,才可以有B表的parentid,现在是我访问A表后就会报ORA-04091: 表 HNTELANT.XB_UIMCARD 发生了变化, 触发器/函数不能读它错误,各位有什么好招,急求解,重赏!!

解决方案 »

  1.   

    触发器很长很长,我写几个关键的吧
    建触发器 on A:
    select name into v_name from A where ID IN (
    SELECT parentid from a where id = :new.id);--找到A表父级name,--这一句异常,对自身触发表操作了select id into v_id from B where name = v_name;通过A表父级name,找到B表父级idinsert into b(id,name,parentid) values(s_b.nextval,:new.name,v_id );--如果做插入,同步数据到B表.
      

  2.   

    触发器很长很长,我写几个关键的吧
    建触发器 on A:
    select name into v_name from A where ID IN (
    SELECT parentid from a where id = :new.id);--找到A表父级name,--这一句异常,对自身触发表操作了select id into v_id from B where name = v_name;通过A表父级name,找到B表父级idinsert into b(id,name,parentid) values(s_b.nextval,:new.name,v_id );--如果做插入,同步数据到B表.
      

  3.   

    触发器很长很长,我写几个关键的吧
    建触发器 on A:
    select name into v_name from A where ID IN (
    SELECT parentid from a where id = :new.id);--找到A表父级name,--这一句异常,对自身触发表操作了select id into v_id from B where name = v_name;通过A表父级name,找到B表父级idinsert into b(id,name,parentid) values(s_b.nextval,:new.name,v_id );--如果做插入,同步数据到B表.
      

  4.   


    不能对触发表进行dml语句 除非自治事务 可以引用:new 或者old 或者修改select name into v_name from A where ID IN (
    SELECT parentid from a where id = :new.id);--改成
    v_name:=:new.name
      

  5.   

    异变表,不能在trigger对trigger所在表既做修改又做查询
      

  6.   

    但是我必须要用到这个表啊,必须要找到父级的名称,然后才能在B表根据这个名称找到ID。
      

  7.   

    但是必须要用到这个表啊,必须要找到A表父级的名称,然后才能在B表根据这个名称找到ID。
      

  8.   

    但这个必须要查询自己,必须要查到自身表的父级的NAME,然后B表才能根据这个name找到B表的父级ID,
      

  9.   

    ---不晓得性能如何
    在触发器声明部分

    pragma autonomous_transaction;
    ....commit;