Oracle 具有不可互换值的多列上的唯一约束

Oracle 具有不可互换值的多列上的唯一约束,oracle,plsql,Oracle,Plsql,我想对colA和colB这两列设置唯一约束。一旦设置了约束,它将确保colA和colB的值组合是唯一的 它还应该确保,例如 对于表中的一行,如果colA值为100,colB值为101,则该表中任何其他行的colA值不能为101,colB值不能为100 请建议 问候,, Sachin检查和唯一索引 create table uni(colA number, colB number); ALTER TABLE uni ADD CONSTRAINT constraint_name

我想对colA和colB这两列设置唯一约束。一旦设置了约束,它将确保colA和colB的值组合是唯一的

它还应该确保,例如

对于表中的一行,如果colA值为100,colB值为101,则该表中任何其他行的colA值不能为101,colB值不能为100

请建议

问候,,
Sachin

检查
唯一索引

    create table uni(colA number, colB number);

    ALTER TABLE uni ADD CONSTRAINT constraint_name  check( cola != colb);

    create unique index uni_idx on uni(  LEAST( cola , colb),GREATEST(cola , colb));

insert into uni values (100,101); (OK)
into uni values (100,102); (OK)
into uni values (101,100); (error)
into uni values (100,100); (error)

(通过
检查
)强制执行
colA
始终小于
colB
)是否可以接受?不,不是colA始终小于colB的情况。对于表中的任何ID,colA和colB的值都不能互换。如果你需要进一步的解释,请告诉我。虽然带有检查约束的解决方案应该是可以接受的。是的,您是对的,我忘了从索引中删除
| |
。我如何检查WHERE子句中此索引的有效性?我的意思是,从uni中选择*其中最少(可乐,可乐)=最大(可乐,可乐)?或者其他类似的条款?但你为什么要检查它?执行插入和处理两个异常(
ORA-02290,ORA-00001
)嗨,由于需要,我必须检查它,并通过形成自定义错误消息在单独的日志表中输入一个条目。处理异常和插入日志<代码>开始--插入到表提交;异常当其他人然后如果sqlcode在(-2290,-1)然后-插入到日志表提交;否则提高;如果结束;结束