tableA:
ID_A NAME_A STATUS_A
tableB:
ID_B NAME_B ID_A
tableC:
ID_C NAME_C ID_BtableB_LOGS:
ID_B NAME_B ID_A
tableC_LOGS:
ID_C NAME_C ID_BtableA的ID_A与tableB的ID_A相关联,tableB的ID_B与tableC的ID_B相关联,tableB_LOGS,tableC_LOGS是tableB和tableC的日志表,字段完全一样.
声明:tableA与tableB是一对多,tableB与tableC是一对一。当修改STATUS_A=1时,将当前记录的ID_A取出,在tableB和tableC中查找,将tableB和tableC中ID与ID_A相同的所有的数据
导入到 tableB_LOGS和tableC_LOGS中。
当修改STATUS_A=0时,将当前记录的ID_A取出,在tableB_LOGS和tableC_LOGS中查找,将tableB_LOGS和tableC_LOGS中ID与ID_A
相同的所有数据导入到tableB和tableC中。同时删除tableB_LOGS和tableC_LOGS中导出的数据。
请问这个触发器怎么写呢,根据详细情况给分。谢谢。

解决方案 »

  1.   

    create or replace trigger t_a
      AFTER UPDATE on tableA 
      for each row
    DECLAREBEGIN  IF :NEW.STATUS_A = '3' THEN
    //查询,并插入
        INSERT INTO SSH_B VALUES (:NEW.ID, :NEW.A_NAME);
      END IF;
      IF :NEW.STATUS_A = '0' THEN
    //插入,删除
        INSERT INTO SSH_B VALUES (:NEW.ID, :NEW.A_NAME);
      END IF;
    END T_A;
      

  2.   

    create or replace trigger tg_tablea
    after update on tablea
    for each row
    when (new.status_a in (0,1))
    begin
    if :new.status_a=1 then 
      insert into tableB_LOGS
        select * from tableb
        where id_b=:old.id_a;
      insert into tablec_LOGS
        select * from tablec
        where id_c=:old.id_a;
    else
      insert into tableb
        select * from tableb_logs
        where id_b=:old.id_a;
      insert into tablec
        select * from tablec_logs
        where id_c=:old.id_a;
      delete from tableb_logs where id_b=:old.id_a;
      delete from tablec_logs where id_c=:old.id_a;
    end if;
    end;
      

  3.   

    那个WHEN条件里的new.status_a in (0,1)前面不用加冒号的吗?