根据要求,我们面临着一种独特的情况。我们想在桌面上创建一些虚拟主键,仅用于特定的提交者ID。注意:提交者ID是表格中的一列。
我们决定使用触发器来实现这个目标但是对于插入它工作正常,但是在检查更新时它会给出以下错误: [ORA-04091:表XYZ正在变异,触发/功能可能看不到它]
了解工作流程的示例:
表结构(序列,Submitter_id,国家/地区,描述)
唯一主键:序列
如果Submitter_id ='SYSTEM',那么我们在Country上也需要一些虚拟主键。
表XYZ上的BEFORE INSERT或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;
提前致谢。
答案 0 :(得分:1)
没有必要使用触发器。我只想创建一个功能独特的索引。
create unique index xyz_unq on xyz(decode(submitter_id, 'SYSTEM', country));