create table t_temp
(
  id   varchar2(10) primary key,
  len1  number(6,0),
  len2  number(6,0),
  len number(7,0)
)
当update某一行的len1或len2值后,则修改该行len的值(len = len1 + len2),
或者insert 一条新的记录后,修改len = len1 + len2
哪位帮我用触发器实现上面的功能

解决方案 »

  1.   

    create trigger tri
    befor insert or update on t_temp
    for each row
    begin
       :NEW.len := :NEW.len1 + :NEW.len2;
    end;
      

  2.   

    create or replace trigger tgtemp
    before insert or update of len1,len2
    on t_temp
    for each row
    begin
    :new.len:=:new.len1+:new.len2;
    end;
      

  3.   

    oracle 不允许触发器修改它正在触发的表
      

  4.   


    当update某一行的len1或len2值
    或者insert 一条新的记录
      

  5.   

    3楼正解,2楼befor少写个"e",呵呵
      

  6.   

    楼上的都对了,这种情况要用before的。
    SQL> select * from t_temp;ID            LEN1    LEN2      LEN
    ---------- ------- ------- --------
    1                2       1        2
    2                2       3        5SQL> 
    SQL> create or replace trigger tri_t_tmp
      2  before insert or update of len1,len2
      3  on t_temp
      4  for each row
      5  begin
      6    :new.len:=:new.len1+:new.len2;
      7  end;
      8  /Trigger createdSQL>  insert into t_temp values('3',4,1,2);1 row insertedSQL> select * from t_temp;ID            LEN1    LEN2      LEN
    ---------- ------- ------- --------
    1                2       1        2
    2                2       3        5
    3                4       1        5SQL> update t_temp set len1=100 where id='1';1 row updatedSQL> select * from t_temp;ID            LEN1    LEN2      LEN
    ---------- ------- ------- --------
    1              100       1      101
    2                2       3        5
    3                4       1        5SQL> 
      

  7.   

    如果执意要 insert update后再修改,你觉得能用触发器做么?是要达到目的,而不是执着过程。
      

  8.   

    你说的“后”和触发器的before没有必然的联系
    由于插入或更改的记录的len值要根据len1和len2进行修改,此时需要记录尚未更改或插入,才能对:new.colname进行赋值。
    否则就需要改成表级触发器,进行update全表操作,有不必要的麻烦
      

  9.   

    create or replace trigger A
      before insert or update of len1, len2 on A
      for each row
    begin
      :NEW.len := :NEW.len1 + :NEW.len2;
    end;
      

  10.   

    哪位能给出对before 和 after的理解,可能我对before 和 after 理解有误。
    谢谢!
      

  11.   

    create or replace trigger tgtemp 
    before insert or update of len1,len2 
    on t_temp 
    for each row 
    begin 
    :new.len:=:new.len1+:new.len2; 
    end;
      

  12.   

    应用plsql语言的,而不是sql语言的。