我的本意是想这样,创建primary key为id的表temp1,创建primary key为id的表temp2,temp2的id外键约束到temp1的id,  然后加入我已经给temp1插入了一条数据,然后给temp2插入id相同的一条数据,但是我希望temp2表中的name值能自动地被赋值为temp1中那个id所在的name值。 于是我这样创建表temp1,temp2,和促发器 temp2_trigger.    但是下面的触发器的语法是错误的,我百思不得其解...
 create table temp1 

 id int not null primary key, 
 name varchar2(20) 
);    
create table temp2 

 id int not null primary key, 
 name varchar2(20), 
 other varchar2(20), 
 constraint foreign_1  foreign key (id) references temp1(id), 
  
) create or replace trigger temp2_trigger
before insert on temp2
for each row
begin
 select temp1.name into :new.name from temp1 where temp1.id=temp2.id
;end temp2_trigger;
/

解决方案 »

  1.   

    create or replace trigger temp2_trigger 
    after insert on temp2 
    for each row 
    begin 
      update temp2 set name=(select name from temp1 where id=:new.id); 
    end temp2_trigger; 
      

  2.   

    更正一下,上面有严重的错误:
    create or replace trigger temp2_trigger  
    after insert on temp2  
    for each row  
    begin  
      update temp2 set name=(select name from temp1 where id=:new.id) where id=:new.id;  
    end temp2_trigger;  
    /  
      

  3.   

      谢谢楼上,思想是对了,但是怎么还是发生错误呢?  插入不进数据给temp2.
      
      

  4.   

    create or replace trigger temp2_trigger 
    after insert on temp2 
    for each row 
    begin 
     select temp1.name into :new.name from temp1 where temp1.id=:new.id;
    end temp2_trigger; 
      

  5.   

    改成before触发器:
    create or replace trigger temp2_trigger
    before insert on temp2
    for each row
    declare
    v_name varchar2(20);
    begin
      select name into v_name from temp1 where id=:new.id;
     :new.name:=v_name;
     end;