就是一个insert触发器,比如有一个表有三个字段 one two three
其中 one 这个字段的值在插入的时候可能出现不是我想要的值,
但是我有一个表可以对它进行参照转换,比如这个表就叫cankao,
这个表可以通过one去找对应的我实际要改的值,比如one 是1的话 在这个表里面对应的是5
那么one的值就要相应的替换为5,如果找不到的话那么one的值就还是one本身的值  
希望大家帮忙,非常感谢了

解决方案 »

  1.   


    SQL> create table t1(one int,two int,three int);Table createdSQL> create table cankao(idx int,code int);Table createdSQL> insert into cankao select 1,5 from dual;1 row insertedSQL> select * from cankao;                                    IDX                                    CODE
    --------------------------------------- ---------------------------------------
                                          1                                       5SQL> create or replace trigger test_trigger
      2  before insert on t1 for each row
      3  declare
      4    value1 int;
      5  begin
      6    select code into value1 from cankao where idx = :new.one;
      7    :new.one := value1;
      8  end;
      9  /Trigger createdSQL> insert into t1 select 1,2,3 from dual;1 row insertedSQL> select * from t1;                                    ONE                                     TWO                                   THREE
    --------------------------------------- --------------------------------------- ---------------------------------------
                                          5                                       2                                       3
      

  2.   

    谢谢楼上的了,深受启发不过好像还是少了点,因为可能存在在cankao这个表中找不到的情况如果找不到就还是用原值 比如9在这个表中没有对应的 那插入的就还是9
      

  3.   

    加上异常处理就可以了。
    create or replace trigger test_trigger
    before insert on t1 for each row
    declare
       value1 int;
     begin
        begin
           select code into value1 from cankao where idx = :new.one;
        exception
           when NO_DATA_FOUND then
              value1 := :new.one;
        end;   
        :new.one := value1;
    end;
    /
      

  4.   

    不想用异常就用这种笨点的方法。
    create or replace trigger test_trigger
    before insert on t1 for each row
    declare
       value1 int;
       intnum int;
    begin
       select count(*) into intnum from cankao where idx = :new.one;
       if intnum = 1 
       then
           select code into value1 from cankao where idx = :new.one;
       else 
           value1 := :new.one;
       end if;   
       :new.one := value1;
    end;
    /