我的程序里向一个例如:表A(ID,name,age)插入数据,先是用 insert into A values(123,'',0) ,
之后 再用update A set name='someone' ,age=20 where id=123 ,问题是我想在数据库中创建一个触发器  当update A表时,把整行数据也插入另一个B表中,做记录日志,(A表与B表结构相同) 请问各位大侠如何创建这个触发器,create  trigger instb_after_insta
after update on A  for each row
begin
insert into  B  values(:new.name,:new.age);
end;但这样做 B表没有ID的值,如何能将A表的ID值也加入B表中,谢谢各位大侠的帮助!

解决方案 »

  1.   

    --加上id就是了,:new关键字是获取更新后的那个行,因此含有ID字段的
    create trigger instb_after_insta
    after update on A 
    for each row
    begin
    insert into B(id,name,age) values(:new.id,:new.name,:new.age);
    end;
      

  2.   

    嗯,谢谢一楼,我也试过可以了,但是问题是A,B表有一百多个字段,能不能把
     begin
    insert into B(id,name,age) values(:new.id,:new.name,:new.age);
    end;
    这句改简单的呢?谢谢
      

  3.   

    恐怕不行,要一个一个写,只需要写后面values中的值就行了
      

  4.   

    想到一个简单的思路,用游标来拼接insert语句。
    user_tab_cols 视图来查询表上的所有字段,然后用游标读取,拼接insert语句
      

  5.   

    如果A表的ID不更新,是不是应该用:OLD.ID呀?
      

  6.   

    我想在SQL中操作,,:new.id=:old.id怎么样写呢?好像SQL 不允许 使用:new.id :old.id
      

  7.   


    create trigger instb_after_insta
    after update on A for each row
    begin
    insert into B(id,name,age) values(:new.id,:new.name,:new.age);
    end;
      

  8.   


    create trigger instb_after_insta
    after update on A for each row
    when(new.id<>old.id)
    begin
    insert into B(id,name,age) values(:new.id,:new.name,:new.age);
    end;
      

  9.   

    但在SQL中都不可以使用 NEW或OLD这个词 哦
      

  10.   

    什么sql oracle 就可以用 
      

  11.   

    你有一百多个栏位的话 只能写一百多个new和old但是如果你是有选择性的 比如只对某几个栏位的update进行记录的话就好些多了
      

  12.   

     select   sys_context   ( 'userenv ', 'ip_address ')   into   v_ip   from   dual; 
    得到IP,然后你在触发器中定义一个变量,将此结果返回值插入你的表中就可以了。
      

  13.   


    消息 195,级别 15,状态 10,第 1 行
    'sys_context' 不是可以识别的 内置函数名称。
    对象名  'dual' 无效。出现这样的错误,能解释一下吗?谢谢~