Oracle唯一约束-混合情况



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

ID
FUNCTION_ID
FUNCTION_ROLE

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

然而,我的问题是,由于FUNCTION_ROLE是一个字符串,并且值可以是混合大小写,防止这种情况发生的最佳方法是什么,即:

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

当试图插入行2时,我希望得到一个唯一的约束冲突,因为"Test1"与"Test1"相同——只是情况不同。

我想创建另一个名为FUNCTION_ROLE_UPER的列,并将该列与FUNCTION_ID一起使用以检查唯一性,这是正确的方法吗?

您可以使用基于函数的索引来实现这一点:

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

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

相关内容

最新更新