ton*_*nyf 3 sql oracle database-design constraints oracle11g
我有一个包含以下列的Oracle表:
ID
FUNCTION_ID
FUNCTION_ROLE
Run Code Online (Sandbox Code Playgroud)
ID列是唯一的(序列)但我也希望两者(FUNCTION_ID,FUNCTION_ROLE)组合也是唯一的.
我的查询是,因为FUNCTION_ROLE是一个字符串,并且值可以是混合大小写,防止这种情况发生的最佳方法是什么,即:
Data for this table:
Row 1: 1,1,TEST1
Row 2: 2,1,Test1
Run Code Online (Sandbox Code Playgroud)
我试图在尝试插入第2行时获得一个唯一的约束违规,因为'Test1'与'TEST1'相同 - 只是情况不同.
我如何防止这种情况,因为我正在考虑创建另一个名为FUNCTION_ROLE_UPPER的列,并使用此列和FUNCTION_ID来检查唯一性 - 这是正确的方法吗?
谢谢.
Bra*_*vic 10
您可以使用基于函数的索引来实现此目的:
CREATE UNIQUE INDEX YOUR_TABLE_U1 ON YOUR_TABLE(FUNCTION_ID, UPPER(FUNCTION_ROLE))
Run Code Online (Sandbox Code Playgroud)
在Oracle 11下,您还可以考虑放入UPPER(FUNCTION_ROLE)虚拟列.
| 归档时间: |
|
| 查看次数: |
2380 次 |
| 最近记录: |