我有一个专栏,我需要能够保证永远不会被设置为除“N”以外的任何东西 - 我认为触发器将是完美的解决方案,但我似乎无法弄清楚如何制作这样,无论何时将列设置为“N”以外的其他值,我都会将其重置为“N”
任何指针?
编辑:我不想做一个约束,因为可能将它改为Y的应用程序超出了我的控制范围,我不希望它在设置为Y时出错,我只是想要被动地将它重新置于N而不是大张旗鼓。答案 0 :(得分:2)
我建议使用列约束而不是触发器。更容易追踪和调试。但我认为你的意思是它永远不能设置为N或null以外的任何值,对吗?如果没有,如果值始终为'N',为什么还要存储它?
答案 1 :(得分:1)
或许这样的事情。我知道这是一个坏主意,它会回来困扰你。此外,我几年没有完成Oracle,但这应该让你开始:
create or replace trigger trg_special_col before update on AnnoyingTable
for each row
begin
:new.special_col := 'N';
end;
答案 2 :(得分:0)
最简单的方法(如果您可以选择创建视图)是在表上提供一个视图,并将相关列的值设置为视图中的静态值“N” - 即持久化视图中的值。