oracle 触发器 当员工的状态修改为离职时,将员工的信息插入到员工离职表中
createorreplacetriggerdel_emp_insert_empleaveafterupdateonemployeeforeachrowdeclarenv...
create or replace trigger del_emp_insert_empleave
after update on employee for each row
declare
n varchar2(10);
o_status number;
o_id number(5);
o_name varchar2(20);
o_dept_id number(5);
begin
n := :new.emp_status;
o_id := :old.emp_id;
o_status := :old.status;
o_name := :old.emp_name;
o_dept_id := :old.dept_id;
if n='离职' and o_status=0 then
insert into employeeleave(emp_id,emp_name,dept_id,el_type,el_time,status) values(o_id,o_name,o_dept_id,'外调',sysdate,0);
end if;
if n='离职' and o_status=1 then
insert into employeeleave(emp_id,emp_name,dept_id,el_type,el_time,status) values(o_id,o_name,o_dept_id,'请辞',sysdate,0);
end if;
end;
错误:
ORA-04091: 表 SU.EMPLOYEE 发生了变化, 触发器/函数不能读它
ORA-06512: 在 "SU.TI_EMPLOYEELEAVE", line 32
ORA-04088: 触发器 'SU.TI_EMPLOYEELEAVE' 执行过程中出错
ORA-06512: 在 "SU.DEL_EMP_INSERT_EMPLEAVE", line 17
ORA-04088: 触发器 'SU.DEL_EMP_INSERT_EMPLEAVE' 执行过程中出错
我测试就是insert 有错,谁能帮我下,完整的示例
离职表没有主键,就是引用了下员工表的主键! 展开
after update on employee for each row
declare
n varchar2(10);
o_status number;
o_id number(5);
o_name varchar2(20);
o_dept_id number(5);
begin
n := :new.emp_status;
o_id := :old.emp_id;
o_status := :old.status;
o_name := :old.emp_name;
o_dept_id := :old.dept_id;
if n='离职' and o_status=0 then
insert into employeeleave(emp_id,emp_name,dept_id,el_type,el_time,status) values(o_id,o_name,o_dept_id,'外调',sysdate,0);
end if;
if n='离职' and o_status=1 then
insert into employeeleave(emp_id,emp_name,dept_id,el_type,el_time,status) values(o_id,o_name,o_dept_id,'请辞',sysdate,0);
end if;
end;
错误:
ORA-04091: 表 SU.EMPLOYEE 发生了变化, 触发器/函数不能读它
ORA-06512: 在 "SU.TI_EMPLOYEELEAVE", line 32
ORA-04088: 触发器 'SU.TI_EMPLOYEELEAVE' 执行过程中出错
ORA-06512: 在 "SU.DEL_EMP_INSERT_EMPLEAVE", line 17
ORA-04088: 触发器 'SU.DEL_EMP_INSERT_EMPLEAVE' 执行过程中出错
我测试就是insert 有错,谁能帮我下,完整的示例
离职表没有主键,就是引用了下员工表的主键! 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询