Oracle:约束检查号范围冲突

时间:2015-03-23 20:11:36

标签: oracle check-constraints

有没有办法按约束检查数字范围的空交点?例如:

CREATE TABLE "AGE_CATEGORIES" (
  "AGE_CATEGORY_ID" CHAR(2 BYTE) NOT NULL PRIMARY KEY,
  "NAME" NVARCHAR2(32) NOT NULL,
  "RANGE_FROM" NUMBER(*,0) NOT NULL,
  "RANGE_TO" NUMBER(*,0) NOT NULL,

  CONSTRAINT "UK_AGE_CATEGORIES_NAME" UNIQUE ("NAME"),
  CONSTRAINT "CHK_AGE_CATEGORIES_RANGE_COLLISION" CHECK (
    ???
  ) ENABLE
);

上面代码中的问号意味着:

(SELECT COUNT("AGE_CATEGORY_ID")
   FROM "AGE_CATEGORIES" AC
  WHERE "RANGE_FROM" < AC."RANGE_TO"
    AND "RANGE_TO" > AC."RANGE_FROM") = 0

所以我需要检查新的年龄类别是否与该表中存储的任何其他间隔没有交集。有可能吗?

1 个答案:

答案 0 :(得分:2)

可以这样做,但涉及创建具有约束的物化视图 - 请参阅my blog post。然而,这种方法需要仔细考虑,因为它可能会影响性能。实际上,这种逻辑不是通过约束来检查的,只能通过API或触发器中的过程代码来检查。