我创建2名表的员工和客户。而员工表的代码是在这里:在更新触发在oracle?
create table employees(
employeeNumber number not null,
lastName varchar2(30) not null,
firstName varchar2(30) not null,
email varchar2(50) not null,
officeCode varchar2(10) not null,
assignTo number default null,
jobTitle varchar2(100) not null,
primary key (employeeNumber),
foreign key (officeCode) references offices(officeCode),
foreign key (assignTo) references employees(employeeNumber)
);
这里assignTo是他自己的表,员工的外键和employeeNumber是汽车increment.Some插入样品是在这里:
insert into employees (lastName,firstName,email,officeCode,jobTitle)
values ('hasan','rumy','[email protected]','123','manager');
insert into employees (lastName,firstName,email,officeCode,assignTo,jobTitle)
values ('hasan','rakib','[email protected]','123', 1 ,'assistant manager');
客户表的代码是在这里:
create table customers (
customerNumber number not null,
customerName varchar2(50) not null,
phone varchar2(20) not null,
address varchar2(70) not null,
city varchar2(50) not null,
postalCode varchar2(15) not null,
country varchar2(40) not null,
salesRepEmployeeNumber number default null,
primary key(customerNumber),
foreign key (salesRepEmployeeNumber) references employees (employeeNumber)
);
customerNumber之是汽车increment.some样本投放是在这里:
insert into customers
(customerName,phone,address,city,postalCode,country,salesRepEmployeeNumber)
values ('roxy','017456','holy park','kolia','Z143','something',1);
现在我创建员工表的更新employeeNumber列之前,其执行对级联更新触发器和代码是在这里:
create or replace trigger employees_update
before update of employeeNumber on employees
for each row
begin
update employees
set
assignTo = :new.employeeNumber
where assignTo = :old.employeeNumber;
update customers set
salesRepEmployeeNumber = :new.employeeNumber
where salesRepEmployeeNumber = :old.employeeNumber;
end;
/
高于一切是正确的预言,但问题是什么时候更新员工table.The更新代码是在这里:
update employees set employeeNumber = 134 where employeeNumber = 1;
的问题是在这里:
ORA-04091: table RUMY.EMPLOYEES is mutating, trigger/function may not see it
ORA-06512: at "RUMY.EMPLOYEES_UPDATE", line 2
ORA-04088: error during execution of trigger 'RUMY.EMPLOYEES_UPDATE'
1. update employees set employeeNumber = 134 where employeeNumber = 1;
据我所知,这是一个系统问题,所以我犯了错误?我不能让员工表的外键assignTo?还注意到同样的事情在mysql中正常工作。先行谢谢你回答这个长问题。
运行此'SHOW ERRORS TRIGGER employees_update'获取更多详细信息 – Mihai 2014-09-20 17:06:09
查询'show errors trigger employees_update'发生错误,即:“无效的SQL语句”。 – Rumy 2014-09-20 18:05:12