create table test1(
  id number(15) not null,
  value1 number(15,2) null
)create table test2(
  id number(15) not null,
  value2 number(15,2) null
)insert into test1 (id,value1) values (1,12.5) 请问该如何写?我尝试写了一个但是不行。
create or replace trigger tig_test1
  after insert on test1  
  for each row
declare sumv number(15,2);
begin
  select sum(value1) into sumv from test1 where id=:old.id;
  insert into test2 (value2) values (sumv);
end tig_test1;

解决方案 »

  1.   

    这是我写的,对trigger不是太熟,有问题
    create or replace trigger tig_test1 
      after insert on test1  
      for each row
    declare 
      sumv number;
      PRAGMA AUTONOMOUS_TRANSACTION;
    begin
      select sum(nvl(value1,0)) into sumv from test1 where id=:new.id;
      insert into test2 (value2) values (sumv);
      commit;
    end;
    问题:
         1、假如test1表没有id=1的记录,然后我插入一条id=1的记录,结果test2表中的value2为空!
         2、假如test1表存在id=1的记录,然后我再插入一条id=1的记录,结果test2表中的value2只是以前记录的和,而不包括我插入的这一条!
     
    after insert似乎没起作用,我这么写是我要的结果
    select nvl(sum(nvl(value1,0)),0)+:new.value1 into sumv from test1 where id=:new.id;
    不解
    期待高手指教
      

  2.   

    在你的INSERT语句不提交之前,
    select sum(nvl(value1,0)) into sumv from test1 where id=:new.id;
    这个语句不会包括新插入的这一条。所以你需要自己加上建议最好改为实体化视图