sql触发器-希望将现有行值与插入的值进行比较
我正在创建一个触发器,该触发器应将插入的值与表中已存在的值进行比较。旧的引用器在这里不起作用,因为我正在插入,但是我如何引用已经存在的东西呢? 这是我的表和触发器:sql触发器-希望将现有行值与插入的值进行比较,sql,triggers,insert,Sql,Triggers,Insert,我正在创建一个触发器,该触发器应将插入的值与表中已存在的值进行比较。旧的引用器在这里不起作用,因为我正在插入,但是我如何引用已经存在的东西呢? 这是我的表和触发器: create table events(eid char(2) primary key, cid char(2)); create table activities(mid char(2), eid char(2), primary key (mid, eid), constraint activi
create table events(eid char(2) primary key, cid char(2));
create table activities(mid char(2), eid char(2),
primary key (mid, eid),
constraint activities_fk foreign key (eid) references events(eid));
create or replace trigger check_valid
before insert or update on activities
for each row when (old.mid=new.mid)
declare
v_eid char(2);
v_cid char(2);
n_cid char(2);
begin
select eid into v_eid from activities
where mid=:new.mid;
select cid into v_cid from events
where eid=v_eid;
select cid into n_cid from events
where eid=:new.eid;
if v_cid=n_cid then
raise_application_error(-20000, 'Error');
end if;
end check_valid;
/
show errors;
通常不能从要插入触发器的表中进行选择。这就是变异表问题,或者我经常称之为“该死的变异表问题” 基本上,不要这样做。这是个坏主意。如果同时在手术台上进行两次手术,会发生什么情况?触发器触发,两个会话都看不到另一个会话做了什么,直到触发器之后的提交。然后,您的数据库中出现了意外数据 ,“当我遇到一个变异表错误时,我有一个严重的致命缺陷 按照我的逻辑。”