如何仅使用SQL在Oracle中使用枚举?(没有PSQL)
在MySQL中你可以做到:
CREATE TABLE sizes ( name ENUM('small', 'medium', 'large') );
在Oracle中执行此操作的类似方法是什么?
阅读一下有关MySQL枚举的内容,我猜测最接近的等价物是一个简单的检查约束
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, <> FROM valid_sizes a, sizes b WHERE a.name_id = b.name_id
只要您通过视图操作,您似乎可以合理地复制功能.
现在,如果您接受PL/SQL解决方案,您可以创建自定义对象类型,其中可以包含限制它们可以容纳的值集的逻辑,以及获取ID和获取值等的方法.