oracle 表 SCOTT.EMP 发生了变化, 触发器/函数不能读它

CREATE OR REPLACE TRIGGER updatetrigger
BEFORE UPDATE ON EMP
FOR EACH ROW
DECLARE
v_numNUMBER;
BEGIN
SELECTcount(*) INTO v_num FROM emp
WHERE deptno = :new.deptno;
IF (v_num > 7) THEN
RAISE_APPLICATION_ERROR(-20001, '员工数多于'||v_num);
END IF;
END updatetrigger;

我创建了个触发器,更新数据的时候触发了触发器,为什么警告信息不是 '员工多于7'
而是
ORA-04091: 表 SCOTT.EMP发生了变化, 触发器/函数不能读它
ORA-06512:在 "SCOTT.UPDATETRIGGER",line 4
ORA-04088:触发器 'SCOTT.UPDATETRIGGER'执行过程中出错

不能写 SELECTcount(*) INTO v_num FROM emp 这句 ,这违反ORACLE触发器的设计初衷

RAISE_APPLICATION_ERROR(-20001, '员工数多于'||v_num)==> 你可以使用check constraint 来实现

over追问

能不能帮我改进一下上述触发器,更新时员工多于7人则出现自定义报错信息(老师要求触发器实现) 谢谢!

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-12-10
v_numNUMBER 这里变量与数据类型要有空格
第2个回答  2013-12-10
这个没办法啊,逐行触发器里面 select 被触发的表,是有这方面的限制的。
相似回答