在Oracle中将值从一个表填充到另一个表

在Oracle中将值从一个表填充到另一个表,oracle,triggers,oracle-sqldeveloper,Oracle,Triggers,Oracle Sqldeveloper,我是甲骨文上的一只新蜜蜂。 我必须创建一个触发器,允许我在插入新记录之前将数据从表X的特定字段复制到表Y,该记录基于其键IPARKEY for X和IDNUMPARTICIPANT for Y 很明显,我确实错误地编写了触发器,因此我将感谢您的帮助,修复它并获得所需的业务 因为您已经声明了游标,所以循环可以更简洁一些: create or replace trigger data_idocuments_insert_triger before insert on y for each

我是甲骨文上的一只新蜜蜂。 我必须创建一个触发器,允许我在插入新记录之前将数据从表X的特定字段复制到表Y,该记录基于其键IPARKEY for X和IDNUMPARTICIPANT for Y


很明显,我确实错误地编写了触发器,因此我将感谢您的帮助,修复它并获得所需的业务

因为您已经声明了游标,所以循环可以更简洁一些:

create or replace trigger data_idocuments_insert_triger
   before insert on y
   for each row

declare
   cursor c is
      select iparnom
            ,iparprenom
            ,ipardatenaissance
            ,iparnumsecu
        from x
       where iparkey = :new.idnumparticipant;
begin
   for r in c loop
      -- THOSE ARE THE NEEDED fIELDS TO BE POPULATED.. 
      :new.idnom             := r.iparnom;
      :new.ipardatenaissance := r.ipardatenaissance    
   end loop;
end;
当然,如果您的查询返回的行数超过1行,您将得到最后一个要分配给Y中的列的值。 如果您确定最多可以重写一条记录,则:

create or replace trigger data_idocuments_insert_triger
   before insert on y
   for each row

begin
   select iparnom
         ,ipardatenaissance
     into :new.idnom
         ,:new.ipardatenaissance
     from x
    where iparkey = :new.idnumparticipant;
exception
   when no_data_found then
      null;
end;

如果x.iparkey是主键或唯一键,则只能确保查询最多返回1条记录。

谢谢,我想我会选择第二个触发器,因为它是PK
create or replace trigger data_idocuments_insert_triger
   before insert on y
   for each row

begin
   select iparnom
         ,ipardatenaissance
     into :new.idnom
         ,:new.ipardatenaissance
     from x
    where iparkey = :new.idnumparticipant;
exception
   when no_data_found then
      null;
end;