【发布时间】:2018-10-03 19:11:00
【问题描述】:
我有一张这样的桌子:
create table person(
id_person number(5),
city varchar(20)
);
insert into person values (1, 'NY');
insert into person values (2, 'Los Angeles');
我想将“人”动作注册到一个新表中:
create table move_city(
new_location varchar(200)
);
我有一个触发器来执行此操作:
create or replace trigger person_movement
after update of city on person
for each row
begin
insert into move_city values('The person has moved from ' ||:old.city|| ' to ' || :new.city);
end;
/
并且正在按预期工作。
如果我这样做:
update person set city='Boston' where id_person=1;
我在 move_city: '此人已从纽约搬到波士顿'
我的问题是我想将“id_person”放入“move_city”并获得类似“id 的人....已从纽约搬到波士顿”之类的信息,但我不知道我必须做什么在我的触发器中执行。
我的意思是在触发器上是这样的。
insert into move_city values('The person with ' ||id_person|| ' has moved from ' ||:old.city|| ' to ' || :new.city);
但它不起作用。
有什么建议吗?
更新:
我试过了:
create or replace trigger person_movement
after update of city on person
for each row
declare
id2 person.id_person%type;
begin
select id_person into id2 from person where id_person=:new.id_person;
insert into move_city values('The person with ' ||id2|| ' has moved from ' ||:old.city|| ' to ' || :new.city);
end;
/
但是当我这样做时:
update person set city='Boston' where id_person=1;
我得到:
ORA-04091:表 SYSTEM.PERSON 正在变异,触发器/函数可能看不到它
ORA-06512:在“SYSTEM.PERSON_MOVEMENT”,第 4 行
ORA-04088: 执行触发器“SYSTEM.PERSON_MOVEMENT”时出错
【问题讨论】: