I have a table like this one:
create table person(
id_person number(5),
city varchar(20)
);
insert into person values (1, 'NY');
insert into person values (2, 'Los Angeles');
I want to register "person" movements into a new table:
create table move_city(
new_location varchar(200)
);
And I have a trigger to do this:
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;
/
And is working as expected.
If I do:
update person set city='Boston' where id_person=1;
I have on move_city: 'The person has moved from NY to Boston'
My problem is that I want to put the 'id_person' in 'move_city' and obtain something like 'The person with id .... has moved from NY to Boston', and I don't know what i have to do in my trigger.
I mean something like this on the trigger.
insert into move_city values('The person with ' ||id_person|| ' has moved from ' ||:old.city|| ' to ' || :new.city);
But it doesn't work.
Any suggestion?
Update:
I have tried with:
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;
/
But when I do:
update person set city='Boston' where id_person=1;
I obtain:
ORA-04091: table SYSTEM.PERSON is mutating, trigger/function may not see it
ORA-06512: at "SYSTEM.PERSON_MOVEMENT", line 4
ORA-04088: error during execution of trigger 'SYSTEM.PERSON_MOVEMENT'