甲骨文的SQL约束where子句(Oracle SQL Constraint where claus

2019-09-21 21:41发布

我有与下列列的Oracle表测试仪:

  • TesterID
  • TesterName
  • ISDEFAULT
  • APPLICATION_ID

TesterID是主键。 现在,我想这只能有一个默认的测试,这意味着只有一个测试可以有calues ISDEFAULT = Y在的applicationID。

我有一个约束试了一下:

alter table Tester add constraint Tester_ISDEFAULT UNIQUE(IsDefault,Application_ID);

是否有可能使在哪里ISDEFAULT = Y的唯一关键?

感谢帮助!

Answer 1:

不与UNIQUE约束。 但是,你可以使用一个UNIQUE INDEX ,而不是:

CREATE UNIQUE INDEX ApplicationId_Default_Y ON tester (
  CASE WHEN IsDefault = 'Y'
       THEN ApplicationId
       ELSE NULL
  END
);

这里有一个DEMO



Answer 2:

您可以使用基于函数的唯一索引,而不是约束这样做:

create unique index tester_isdefault on tester 
  (case when isdefault='Y' then application_id end);

由于Oracle不需要钥匙是所有空,只有在ISDEFAULT =“Y”将会出现在索引行创建索引条目。



Answer 3:

该约束是行不通的,因为这将意味着你只能有两行对每个APPLICATION_ID - 一个与ISDEFAULT = 0和其他与ISDEFAULT = 1。

你可以执行这个逻辑与触发器。 或者说,为什么不直接执行它在你的应用程序逻辑?



Answer 4:

测试仪上创建唯一索引tester_ui_1(解码(is_default, 'Y',0,tester_id)APPLICATION_ID)



文章来源: Oracle SQL Constraint where clause