一个简单的触发器问题,帮忙啊!
xmao 2006-03-28 01:43:25 对于同一个表t_emp_cde(人员表),我想判断,如果这个员工的部门发生改变c_dpt_cde(部门字段),我就设置其他两个字段为0,触发器我这么写的:
CREATE OR REPLACE TRIGGER TRI$_T_EMP_CDE_CHANGEDEP
BEFORE UPDATE of c_dpt_cde ON T_EMP_CDE FOR EACH ROW
DECLARE
v_emp_cde VARCHAR2(10);
BEGIN
IF UPDATING THEN
v_emp_cde := :NEW.C_EMP_CDE;
IF :NEW.C_DPT_CDE != :OLD.C_DPT_CDE THEN
UPDATE T_EMP_CDE SET NC_STATUS=0 , NC_OPR_STATUS=0
WHERE C_EMP_CDE = v_emp_cde;
END IF;
END IF;
END;
当我执行update语句时报错:
ORA-04091:表T_EMP_CDE发生了变化,触发器/函数不能读 ORA-O6512:在TRI$_T_EMP_CDE_CHANGEDEP LINE 7
我知道可能是变量取值时候发生的错,于是我把触发器作了如下更改;
CREATE OR REPLACE TRIGGER TRI$_T_EMP_CDE_CHANGEDEP
BEFORE UPDATE of c_dpt_cde ON T_EMP_CDE FOR EACH ROW
DECLARE
v_old_emp_cde VARCHAR2(10);
v_new_emp_cde VARCHAR2(10);
BEGIN
v_old_emp_cde:= :old.C_EMP_CDE;
if UPDATING THEN
v_new_emp_cde:= :new.C_EMP_CDE;
IF TRIM(v_new_emp_cde) != TRIM(v_old_emp_cde) THEN
UPDATE T_EMP_CDE SET NC_STATUS='0',NC_OPR_STATUS='0' WHERE C_EMP_CDE = TRIM(v_old_emp_cde);
END IF;
END IF;
END;
这次触发器创建成功,当我执行update语句后没有抱任何错,但我查询NC_OPR_STATUS和NC_STATUS两个字段的时候,发现值没有改变,这是什么原因呢???
在线等待,帮忙解决,十分感谢,要多少分都拿去!