有两张表 tablea和tableb
tablea 中包含 a_id,a_name,a_code 三个字段
tableb 中包含 b_id,b_name,a_id,b_code,b_acode几个字段
现在想建个触发器,在修改和添加tableb表的时候自动填入b_acode字段的内容,b_acode内容为 tablea中a_id 为tableb新添加的a_id值的 a_name和a_code值的组合:“a_name:a_code”,
例子:
   tablea a_id,a_name,a_code
          1     a     aa
          2     b     bb
          3     c     cc
 这时如果在在tableb中添加一条记录 b_id,b_name,a_id,b_code 分别为:1,b,1,bb的时候,tableb中b_acode自动填入 a:aa
请问各位高手这个trigger该怎么写??
不知道表达是否清楚了。

解决方案 »

  1.   

    create or replace trigger tr_1
    before insert on tableb
    for each row
    declare
    v_var varchar2(100);
    begin
    select a_name||':'||a_code into v_var
    from tablea
    where a_id=:new.a_id;
    :new.b_acode:=v_var;
    end;
    /
      

  2.   

    不知道你把tablea的表结构贴出来干嘛呢?不需要建立触发器,你插入的时候,把a_name||':'||a_code合并后,插入到b_aCode字段中如果是11g的话,支持计算列
      

  3.   

    create or replace trigger tr_1
    before insert or update on tableb
    for each row
    declare
    v_var varchar2(100):= '';
    begin
    if(:new.a_id is not null) then  --插入或更新时,a_id不为空,取a_id
    select a_name||':'||a_code into v_var 
    from tablea
    where a_id=:new.a_id;
    else --否则看看是不是修改,如果是修改,看看是不是存在对应原来的a_id
    begin
    select a_name||':'||a_code into v_var
    from tablea
    where a_id=:old.a_id;
    exception when no_data_found then
    null;
    end;
    end if;
    :new.b_acode:=v_var;
    end;
    /
      

  4.   

    楼主不会写?原因是什么呢?不知道是不是不懂:new和:old两个关键字。
    建议楼主看下行级trigger