【发布时间】:2017-02-11 11:45:53
【问题描述】:
根据要求,我们面临一个独特的情况。我们想在表上创建一些虚拟主键,仅为特定的提交者 ID。注意:提交者 ID 是表中的列之一。
我们决定使用触发器来实现这个目标,但是对于插入它可以正常工作,但是在检查更新时它会给出以下错误: [ORA-04091: 表 XYZ 正在变异,触发器/函数可能看不到它]
了解工作流程的示例:
表结构(Sequence,Submitter_id,Country,Description)
唯一主键:序列
如果 Submitter_id = 'SYSTEM' 那么我们还需要 Country 的虚拟主键。
表 XYZ 上的 BEFORE INSERT OR UPDATE 触发器的当前代码在更新期间出错:
If (:NEW.Submitter_Id = 'SYSTEM') Then
BEGIN
SELECT count(1) INTO counterVariable
FROM XYZ
WHERE Country = :NEW.Country
And Submitter_Id = 'SYSTEM';
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20005, 'Sample Error');
END;
If (counterVariable != 0)
Then
raise_application_error(-20005, 'Primary Key Violation error');
End If;
End If;
提前致谢。
【问题讨论】:
-
stackoverflow.com/questions/17609844/… 类似的问题,但没有任何具体的解决方案。寻找解决我的问题的解决方法,它不涉及主键约束或唯一索引。