- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CASEでBETWEEN制約)
Oracle9iの制約でCASEとBETWEENを使用する方法についての質問
このQ&Aのポイント
- Oracle9iにおいて、あるテーブルに制約を付ける際に、CASEとBETWEENを使用したい場合について質問があります。
- 具体的なテーブル構造を持つテーブルにおいて、NAME列に対してGEND列の値に応じて条件分岐し、BETWEENを使用して値の範囲を制約する方法を考えています。
- しかし、実際にテーブルに制約を追加しようとすると、ORA-00920エラーが発生し、関係演算子が無効というメッセージが表示されます。このような制約を追加する方法は可能なのでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>CASEで上記のような制約をつけることは可能でしょうか? その壊れた構文のCASE式では、エラーになって当たり前かと。 正しい構文であれば、CASEを使ったチェックも可能かと思いますよ。 たとえば、 CHECK ( CASE WHEN (GEND = '1') AND (NAME BETWEEN 'a' AND 'z') then 1 WHEN (GEND = '2') AND (NAME BETWEEN 'A' AND 'Z') then 1 WHEN (NAME BETWEEN '1' AND '9') then 1 ELSE 0 END = 1 ) 綺麗な式ではないけど、構文的&論理的には正しい式なので、通ると思いますよ。
お礼
なるほど、このような書き方ができるんですね。 THEN の値と、ENDの後の値を比較するという発想がなかったです。 ありがとうございました。勉強になりました。