質問
SQLのみを使用してOracleで列挙型を使用するにはどうすればよいですか? (PSQLなし)
MySQLでできること:
CREATE TABLE sizes (
name ENUM('small', 'medium', 'large')
);
Oracleでこれを行う同様の方法は何ですか?
解決
MySQL列挙について少し読んで、私はm最も近いものを推測すると、単純なチェック制約になります
CREATE TABLE sizes (
name VARCHAR2(10) CHECK( name IN ('small','medium','large') )
);
ただし、インデックスによって値を参照することはできません。より複雑な外部キー関係も可能です
CREATE TABLE valid_names (
name_id NUMBER PRIMARY KEY,
name_str VARCHAR2(10)
);
INSERT INTO valid_sizes VALUES( 1, 'small' );
INSERT INTO valid_sizes VALUES( 2, 'medium' );
INSERT INTO valid_sizes VALUES( 3, 'large' );
CREATE TABLE sizes (
name_id NUMBER REFERENCES valid_names( name_id )
);
CREATE VIEW vw_sizes
AS
SELECT a.name_id name, <<other columns from the sizes table>>
FROM valid_sizes a,
sizes b
WHERE a.name_id = b.name_id
ビューを操作する限り、機能をかなりうまく複製できるように見えます。
今、PL / SQLソリューションを認める場合、保持できる値のセットを制限するロジックを含むカスタムオブジェクトタイプを作成し、IDを取得したり値を取得したりするメソッドを持つことができます。
他のヒント
このリンクでは、C言語の列挙型に触発されたOracleの代替ソリューション/回避策を見つけることができます: http://www.petefinnigan.com/weblog/archives/00001246.htm
簡単に言えば、ピートは整数定数を定義し、SUBTYPEを使用してそれらを制約することを提案します。
RED constant number(1):=1;
GREEN constant number(1):=2;
BLUE constant number(1):=3;
YELLOW constant number(1):=4;
subtype COLORS is binary_integer range 1..4;
その後、COLLORS型を使用して、変数の宣言、パラメーターの受け渡し、関数からの戻り値などを行うことができます。
列に制約を使用しないのはなぜですか?同じことを行います:
ALTER TABLE x ADD CONSTRAINT size_constraint check(x_size in( 'small'、 'medium'、 'large'))
所属していません StackOverflow