• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CASEでBETWEEN制約)

Oracle9iの制約でCASEとBETWEENを使用する方法についての質問

このQ&Aのポイント
  • Oracle9iにおいて、あるテーブルに制約を付ける際に、CASEとBETWEENを使用したい場合について質問があります。
  • 具体的なテーブル構造を持つテーブルにおいて、NAME列に対してGEND列の値に応じて条件分岐し、BETWEENを使用して値の範囲を制約する方法を考えています。
  • しかし、実際にテーブルに制約を追加しようとすると、ORA-00920エラーが発生し、関係演算子が無効というメッセージが表示されます。このような制約を追加する方法は可能なのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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 ) 綺麗な式ではないけど、構文的&論理的には正しい式なので、通ると思いますよ。

hatimiti
質問者

お礼

なるほど、このような書き方ができるんですね。 THEN の値と、ENDの後の値を比較するという発想がなかったです。 ありがとうございました。勉強になりました。

関連するQ&A