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

时间:2015-11-24 09:18:33

标签: oracle triggers oracle-sqldeveloper

我是甲骨文的新蜜蜂。 我必须创建一个触发器,允许我将表X的数据(从特定字段)复制到其键上的新记录库的表Y before insertIPARKEY表示X,并且Y IDNUMPARTICIPANT

 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;
rc c%ROWTYPE;
BEGIN
OPEN c;
LOOP
FETCH c INTO rc;
-- THOSE ARE THE NEEDED fIELDS TO BE POPULATED.. 
new.IDNOM:= rc.IPARNOM;
new.IPARDATENAISSANCE := rc.IPARDATENAISSANCE
EXIT WHEN c % NOTFOUND;

END LOOP;
END;
很明显,我确实错误地写了触发器,所以我将非常感谢您帮助修复它并获得所需的业务。

1 个答案:

答案 0 :(得分:0)

由于您已经声明了游标,因此您的循环可以更简洁一些:

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中的列的最后一个值。 如果您确定最多只能有1条记录,则可以重写为:

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条记录。