create table A
(
  NAME     VARCHAR2(30),
  NO       VARCHAR2(30),
  DATETIME VARCHAR2(30)
)create table B
(
  NAME     VARCHAR2(30),
  DATETIME VARCHAR2(30)
)create or replace trigger a_trigger
after insert on a
for each row
declare
result   number;
name     varchar2(30);
datetime varchar2(30);
begin
name := :new.name;
datetime := :new.datetime;
select count(*) into result from b where name = name and datetime = datetime;
if
result = 0
then
begin
insert into b values(name,datetime);
end;
end if;if
result = 1
then
begin
update b set name = 'zz'  where name = name and datetime = datetime;
end;
end if;
end a_trigger;刚学触发器 如上所示 现在有a表和b表 我想在a表插入数据的时候到b表去做相应的检查 如果b表里面有和a表相符的数据则更新b表里面向对应的数据 如果没有则向b表里面插入一条新的数据
现在的问题是这样的 当我第一次向a表插入数据以后是可以实现向b表插入数据的 再一次插入相同数据也可以对b表进行更新操作
但是如果我向a表插入一条新的数据 即name 和datetime 和之前两条数据不一样的时候 b表里面没有出现新的数据
这点表示不理解 请高手帮下

解决方案 »

  1.   

    在插入新数据的时候 result 应该是0才对啊 这个时候应该向b表里面插入新的数据了 不明白为什么当a表没有数据的时候就向b表插入成功了 但是当a表有一条或者两条数据的时候再插入一条新数据b表里面为什么没有出现向对应的新数据
      

  2.   

    定义的变量不要跟表字段同名...create or replace trigger a_trigger
    after insert on a
    for each row
    declare
    result number;
    wrk_name varchar2(30);
    wrk_datetime varchar2(30);
    begin
    wrk_name := :new.name;
    wrk_datetime := :new.datetime;
    PUT(wrk_name);
    PUT(wrk_datetime);
    select count(*) into result from b where name = wrk_name and datetime = wrk_datetime;
    PUT('RESLUT:'||result);
    if
    result = 0
    then
    begin
    insert into b values(wrk_name,wrk_datetime);
    end;
    end if;if
    result = 1
    then
    begin
    update b set name = 'zz' where name = wrk_name and datetime = wrk_datetime;
    end;
    end if;
    end a_trigger;
      

  3.   

    谢谢 xiaodejun5241 我弄了一下也发现是这个问题 
    感谢!