由于在数据插入的时候,某一个或者几个字段中的数据带有空格(或左或右),导致数据在job中执行失败。
为了解决这个问题,我想到了触发器,在插入时或插入后把这些恼人的空格去掉。create trigger A
after insert
on test
for each fow
begin
update test set name=trim(:oid.name) where id=:old.id;
end;创建成功,但是在执行插入的时候报触发器无效,还说什么未验证。
我又改成如下触发器create trigger A
after insert
on test
begin
update test set name=trim(name) where id=id;
end;创建成功,但实际在执行插入后,字段中的数据还是有空格。求大师帮帮忙,或者帮我写一个也行。小弟先谢过。如若执行成功,分数多多。

解决方案 »

  1.   


    create or replace trigger A
    before insert on test
    for each fow
    begin
       :new.name := trim(:new.name);
    end;
      

  2.   

    create or replace trigger tri_A
    after insert
    on test11
    DECLARE
    pragma autonomous_transaction;  ----在DECLARE后面) 表示是自由事务处理
    begin
    update test11 set name=REPLACE(name,' ','') ;
    commit;
    end;
    --------------
    首先你用的是TRIM,只能对两边的空格进行过滤,所以改成REPLACE;
    其次使用这中触发器的时候,只能对历史数据进行UPDATE,对本次的操作无效;
      

  3.   

    create or replace trigger tri_a1
    before insert on test11
    for each row
    begin
       :new.name := trim(:new.name);
    end;-------------这种可以正常更新本次的;
      

  4.   

    在触发器中不要对本表进行dml操作,也不要使用自治事务,这样可能导致死锁!
    采用1楼的方法就可以了。