【问题标题】:Populate values from table to another in Oracle在 Oracle 中将值从表填充​​到另一个表
【发布时间】:2016-02-26 15:48:19
【问题描述】:

我是 Oracle 的新手。 我必须创建一个触发器,它允许我将表 X 的数据(从特定字段)复制到表 Y before insert 的基于其键的新记录(IPARKEY 用于 X,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;

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

【问题讨论】:

    标签: oracle triggers oracle-sqldeveloper


    【解决方案1】:

    既然你已经声明了游标,你的循环可以更简洁一点:

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

    【讨论】:

    • 谢谢你,我想我会去你的第二个触发器,因为它是一个 PK
    猜你喜欢
    • 2023-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    相关资源
    最近更新 更多