【问题标题】:oracle column multiple check enumoracle 列多重检查枚举
【发布时间】:2020-11-26 10:37:21
【问题描述】:

如何在 oracle 表中添加多列表列
像这样

CREATE TABLE atable (
col1 varchar2(10) CONSTRAINT cons_atable_col1 CHECK (col1 IN ('a','b'))
col2 varchar2(10) case col1 
 WHEN 'a' THEN
        CONSTRAINT cons_atable_col2 CHECK (col2 IN ('c','d'))
    WHEN 'b' THEN
          CONSTRAINT cons_atable_col2 CHECK (col2 IN ('e','f'))
  
     ELSE 
null
end

);

【问题讨论】:

  • 如果您只允许 1 个字符,那么为什么 size 是 10?

标签: sql oracle create-table check-constraints


【解决方案1】:

您可以使用布尔逻辑而不是 case 表达式来描述约束。

我认为这实现了你想要的逻辑:

CREATE TABLE atable (
    col1 varchar2(10),
    col2 varchar2(10),
    CHECK ( (col1 = 'a' AND col2 IN ('c','d'))  OR (col1 = 'b' AND col2 IN ('e','f')) )
);

我们还可以将检查约束表示如下:

CHECK ((col1, col2) IN (('a', 'b'), ('a', 'd'), ('b', 'e'), ('b', 'f')))

【讨论】:

  • @خالدبشير:我看不出您的评论与您的​​问题有何关联。您对我发布的代码有疑问吗?
猜你喜欢
  • 2015-01-26
  • 1970-01-01
  • 1970-01-01
  • 2013-03-20
  • 1970-01-01
  • 2014-09-19
  • 1970-01-01
  • 2013-03-12
  • 1970-01-01
相关资源
最近更新 更多