create trigger tD_dd after DELETE on dd for each row begin /*将表cc.id置为空*/ update cc set cc.id = NULL where cc.id = :old.id; /*或者*/ /*从表cc中删除相应记录*/ delete from cc where cc.id = :old.id; end;对于:old和:new,如果我没记错,应该是这样用的。试一下吧。
to yangguang1219() 没有错 一定要先把约束关系disable掉,再做先将子表更新,再更新主表 你可以通过数据字典找到约束关系,通过这些关系,确定这个主表都被那些表引用了, 然后先更新子表,在更新主表最后再把约束关系enable
我现在没有建关系,用Trigger控制 主表的update ,delete已写好 从表的insert ,update写的有问题,劳驾各位帮忙,谢谢! Table dd (id number,name varchar(20) 主表 Table cc(id number ,name varchar(20) create or replace trigger tri_update after update on cc for each row declare cursor cur_update is select id from dd; id cc.id%type; begin for i in cur_update loop if id=i.id then update cc set id = :new.id; end if; end loop; end;成功执行但不正确
begin for i in cur_update loop if id=i.id then update cc set id = :new.id where id =i.id; elsif reise_application_error(-20000,'主表中没有此值'||:new.id); end if; end loop; end;
begin
/*将表cc.id置为空*/
update cc set cc.id = NULL where cc.id = :old.id;
/*或者*/
/*从表cc中删除相应记录*/
delete from cc where cc.id = :old.id;
end;对于:old和:new,如果我没记错,应该是这样用的。试一下吧。
没有错
一定要先把约束关系disable掉,再做先将子表更新,再更新主表
你可以通过数据字典找到约束关系,通过这些关系,确定这个主表都被那些表引用了,
然后先更新子表,在更新主表最后再把约束关系enable
Table cc(id number ,name varchar(20) create or replace trigger tri_update
after update on cc
for each row
declare
cursor cur_update is select id from dd;
id cc.id%type;
begin
for i in cur_update loop
if id=i.id then
update cc set id = :new.id;
end if;
end loop;
end;成功执行但不正确
begin
for i in cur_update loop
if id=i.id then
update cc set id = :new.id where id =i.id;
elsif
reise_application_error(-20000,'主表中没有此值'||:new.id);
end if;
end loop;
end;
create constraint foreign key fk_cc_id on(cc.id) reference dd(id) on delete cascade