🌲

【Oracle Database】決まった値だけを登録したい

2021/11/15に公開

概要

MySQLではMySQLでカラム値は制限できない?実はできたの記事にある通り、ENUMを使用して決まった値のみ登録可能というのを実現できます。
これをOracle Databaseで実現する場合、どうすれば良いか。OracleではENUMの機能はありません。ということで、対応方法をメモ書きします。

対応

Best Practice for "flag" columnsの記事の回答にある通り、CHECK制約を使用することで同様の制約を実現できそうです。
CHECK制約の概要については、こちらのドキュメントを参照ください。

サンプルSQL

CATEGORYというテーブルのopen_flagというカラムを、「OPEN」と「CLOSED」のみに制限する例です。

CREATE TABLE CATEGORY (
 id VARCHAR2(100),
 name VARCHAR2(1000) NOT NULL,
 open_flag VARCHAR2(100) NOT NULL,
 constraint pk_category_id primary key(id),
 constraint category_open_flag_chk CHECK (open_flag IN ('OPRN', 'CLOSED'))
)

Discussion