假设我有 columnGender
和 constraint CHECK( Gender IN ('F', 'M', 'OTHER'))
。
如果我不小心忘记在客户端处理这个问题,用户会看到这样的东西
ORA-02290: check constraint (SYS_C099871244) violated
,这对用户和维护或调试的开发人员都不是很有帮助
有没有办法提供开发人员定义的消息,如(伪)Java 的
assert Gender IN (0,1):'Gender must be F or M'
我能想到的唯一方法是将约束移动到 BEFORE UPDATE OR INSERT 触发器和失败时执行Raise_Application_Error( code, my_message )
。但我不喜欢它
编辑
具体原因列表,根据评论
1. 我真的很喜欢让逻辑尽可能接近数据
2. 对于最终用户 Raise_Application_Error 消息与应用程序消息无法区分
3. 开发人员会看到很好的消息,即使访问数据绕过应用程序
4. 将约束移动到触发器是丑陋的(是吗?),所以我必须找到与 Raise_Application_Error 不同的东西
EDIT2 1,5 年后,在我离开与 db 相关的工作之后,我终于想到了,我真的不喜欢这个 -代码重复。我必须在服务器端和客户端重复完全相同的逻辑。最有可能,使用 2 种不同的语言。并使它们保持同步。这太丑了。
尽管答案清楚地表明,对此我无能为力。所以现在是我成为好公民并最终接受答案的时候了(抱歉,刚刚忘记了)。