如何在Oracle中使用枚举?

Rob*_*uld 35 database oracle enums

如何仅使用SQL在Oracle中使用枚举?(没有PSQL)

在MySQL中你可以做到:

CREATE TABLE sizes (
   name ENUM('small', 'medium', 'large')
);
Run Code Online (Sandbox Code Playgroud)

在Oracle中执行此操作的类似方法是什么?

Jus*_*ave 44

阅读一下有关MySQL枚举的内容,我猜测最接近的等价物是一个简单的检查约束

CREATE TABLE sizes (
  name VARCHAR2(10) CHECK( name IN ('small','medium','large') )
);
Run Code Online (Sandbox Code Playgroud)

但是这不允许您通过索引引用该值.更复杂的外键关系也是可能的

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
Run Code Online (Sandbox Code Playgroud)

只要您通过视图操作,您似乎可以合理地复制功能.

现在,如果您接受PL/SQL解决方案,您可以创建自定义对象类型,其中可以包含限制它们可以容纳的值集的逻辑,以及获取ID和获取值等的方法.