如何在仅使用SQL的Oracle中使用枚举?(无PSQL)

在MySQL中,您可以执行以下操作:

CREATE TABLE sizes (
   name ENUM('small', 'medium', 'large')
);

在甲骨文中,类似的方法是什么?

推荐答案

读一读关于MySQL enum的内容,我猜最接近的类似功能应该是一个简单的判断约束

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和值的方法,等等.

Database相关问答推荐

将数据拆分为月份(以Postgres为单位

第一次请求后数据库连接关闭

在 PostgreSQL 的数组列中查找字符串

这到底是做什么的 Class.forName("com.mysql.jdbc.Driver").newInstance();

在 SQL Server 2008 R2 中,如何强制一列对于整个表是唯一的?

SQL Server 简单插入语句超时

我可以在没有数据源的情况下配置 Grails 吗?

设计数据库时最重要的考虑因素是什么?

从数据库行在 Golang 中创建map

我应该如何使用 MySQL 构建我的设置表?

在 MySQL 中 Select 浮点数

添加具有初始(但不是默认)值的新列的最佳方法?

您最喜欢在 django 中管理数据库迁移的解决方案是什么?

MongoDB 和 PostgreSQL 的思考

如何处理数据库中用户的身份验证/授权?

Django + PostgreSQL:如何重置主键?

标准化人类皮肤 colored颜色 以进行用户交互

C# IEnumerator/yield struct 可能不好?

Guice、JDBC 和管理数据库连接

是否有用于 postgresql 的数据可视化工具,它也能够显示模式间关系?