Oracle唯一约束 - 混合大小写

时间:2012-02-28 03:53:39

标签: sql oracle database-design oracle11g constraints

我有一个包含以下列的Oracle表:

ID
FUNCTION_ID
FUNCTION_ROLE

ID列是唯一的(序列),但我也希望两者(FUNCTION_ID,FUNCTION_ROLE)组合也是唯一的。

我的查询是,因为FUNCTION_ROLE是一个字符串,并且值可以是大小写混合,防止这种情况发生的最佳方法是什么,即:

Data for this table:
Row 1: 1,1,TEST1
Row 2: 2,1,Test1

我希望在尝试插入第2行时会遇到唯一的约束违规,因为'Test1'与'TEST1'相同 - 只是情况不同。

我如何防止这种情况作为一种方法我正在考虑创建另一个名为FUNCTION_ROLE_UPPER的列,并使用此列和FUNCTION_ID来检查唯一性 - 这是正确的方法吗?

感谢。

1 个答案:

答案 0 :(得分:10)

您可以使用基于函数的索引实现此目的:

CREATE UNIQUE INDEX YOUR_TABLE_U1 ON YOUR_TABLE(FUNCTION_ID, UPPER(FUNCTION_ROLE))

在Oracle 11下,您还可以考虑将UPPER(FUNCTION_ROLE)放入虚拟列中。