【发布时间】:2019-03-12 03:01:58
【问题描述】:
更新表格时出现此错误
UPDATE "Username"."EMPPROJECT"
SET ENDDATE = TO_DATE('2016-09-11 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
WHERE ROWID = 'AAF+8XAAEAAGBIGAAB'
AND ORA_ROWSCN = '537035617'
保存对表“用户名”的更改时出错。“EMPPROJECT”:第 8 行:
ORA-04091: 表 Username.EMPPROJECT 正在变异,触发器/函数可能 看不到它 ORA-06512:在“Username.CHECKOVERLAPDATEUPDATE”,第 4 行
ORA-04088: 执行触发器 'Username.CHECKOVERLAPDATEUPDATE' 期间出错
触发器定义如下:
create or replace trigger checkOverlapDateUpdate
before Update on EmpProject
for each row
declare
countOfOverlap integer;
begin
select count(*)
into countOfOverlap
from EmpProject EP
where isOverlapping(:new.startDate, :new.endDate, startDate, endDate) = 1
and EP.EmpID = :new.EmpId;
if countOfOverlap > 0
then
RAISE_APPLICATION_ERROR(-00000, 'Overlapping Insertion Dates');
rollback;
end if;
end;
【问题讨论】:
-
你在谷歌上搜索过“正在变异,触发器/函数可能看不到它”吗?
-
通过这个链接。 Jeffrey Kemp 讨论了可用于实现“非重叠日期约束”jeffkemponoracle.com/2012/08/non-overlapping-dates-constraint 的各种选项
-
对了,
TO_DATE('2016-09-11 00:00:00', 'YYYY-MM-DD HH24:MI:SS')可以写成date '2016-09-11',"EMPPROJECT"应该写成empproject。
标签: sql oracle plsql sql-update database-trigger