一共有三个表分别是A,B,C,表结构如下
A:[id](主键,非空),[cj_id](唯一键,外键,非空),[name](vchar(50),可为空)
B:[id](主键,非空),[well_id](唯一键,外键,非空),[name](vchar(50),可为空)
C:[cj_id](主键,非空),[well_id](外键,非空)表C是表A和表B的关联表,
其中表A的cj_id和biaoB的well_id都来自于表C中的相应字段。现在要求当表A中插入数据时,在表B中的相应字段也插入数据:B.id=A.id,B.well_id=C.well_id,B.name=A.name请问,用触发器能实现吗?最好能写的详细些,我是新手,原来没太接触过这方面的东西,谢谢了。

解决方案 »

  1.   

    现在要求当表A中插入数据时,在表B中的相应字段也插入数据:B.id=A.id,B.well_id=C.well_id,B.name=A.name
    不是很理解,请说明在c表中需要插入数据应满足的条件。
      

  2.   

    当在a中插入数据的时候还要根据a的cj_id到c中去找相应的well_id并把wll_id赋值给b的well_id。可以通过触发器实现。
      

  3.   

    CREATE OR REPLACE TRIGGER trigger_a2b AFTER INSERT ON A FOR EACH ROW
    BEGIN
      INSERT INTO B(id,well_id,name)
      SELECT new.id,C.well_id,new.name
      FROM C
      WHERE C.id=new.cj_id;
    END trigger_a2b;
    /
      

  4.   

    create or replace trigger a_trig
    before insert on a
    declare
    v_id varchar2(20);
    begin
    select well_id into v_id from c where cj_id=:new.cj_id;
    insert into b(id,well_id,name)value(:new.id,v_id,:new.name);
    exception
    when others then
    null;
    end;
    试试看
      

  5.   

    修改一下:
    create or replace trigger a_trig
    before insert on a for each row
    declare
    v_id varchar2(20);
    begin
    select well_id into v_id from c where cj_id=:new.cj_id;
    insert into b(id,well_id,name)value(:new.id,v_id,:new.name);
    exception
    when others then
    null;
    end;
    4楼的比较简单一些。
      

  6.   

    to duqiangcise:
    在触发器中不能使用异常捕获。