列Gender
と制約があるとしますCHECK( Gender IN ('F', 'M', 'OTHER'))
。
私が誤ってこれをクライアント側で処理するのを忘れた場合、ユーザーは、ユーザーにとっても、保守またはデバッグする開発者にとっても、あまり役に立たない
ようなsmthを目にするでしょう。
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とは異なるsmthを見つける必要があります
EDIT2 1 .5年後、db関連の仕事を辞めた後、ついにそれが私に起こりました。これについて私が本当に気に入らないのは、コードの重複です。サーバー側とクライアント側でまったく同じロジックを繰り返す必要があります。ほとんどの場合、2つの異なる言語で。そして、それらの同期を維持します。これはただ醜いです。
答えがはっきりと示しているように、これについて私ができることは何もありません。それで、私が良い市民になり、最終的に答えを受け入れる時が来ました(申し訳ありませんが、それを忘れてしまいました)。