将 table 中的值填充到 Oracle 中的另一个值
Populate values from table to another in Oracle
我是 Oracle 的新蜜蜂。
我必须创建一个触发器,它允许我将 table X 的数据(从特定字段)复制到新记录的 table Y before insert
基于它们的键(IPARKEY
表示 X,IDNUMPARTICIPANT
表示 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;
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;
很明显我确实写错了触发器,所以我将感谢您帮助修复它并获得所需的业务。
因为你已经声明了游标,你的循环可以更简洁一点:
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;
当然,如果您的查询 returns 多于 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 是主键或唯一键,您只能确定查询 returns 最多 1 条记录。
我是 Oracle 的新蜜蜂。
我必须创建一个触发器,它允许我将 table X 的数据(从特定字段)复制到新记录的 table Y before insert
基于它们的键(IPARKEY
表示 X,IDNUMPARTICIPANT
表示 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;
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;
很明显我确实写错了触发器,所以我将感谢您帮助修复它并获得所需的业务。
因为你已经声明了游标,你的循环可以更简洁一点:
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;
当然,如果您的查询 returns 多于 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 是主键或唯一键,您只能确定查询 returns 最多 1 条记录。