【问题标题】:changing the column nullable by a specific value from a column通过列中的特定值更改可以为空的列
【发布时间】:2019-12-05 01:17:03
【问题描述】:
column x (Not NULL)          | column z 
1............................| P
0............................| T

我有一个检查约束:(1, 0) 中的 x 列,所以该列只接受值 1 和 0
我想要的东西真的很奇怪(我不想要过程或触发器)。我想要一种类似约束的方法,通过 x 列具有的值更改列 z 的可为空值

示例:

  • 如果列x 的值为1 列z 应该可以为空,
  • 如果列x 的值为0 列z 应该不为空,默认为N

我为什么要那个?我正在使用 oracle 和 sybase,sybase 中的问题,如果我添加列而不指定是否为 null ,它会自动不为 null(添加 test varchar(12)

也许程序会更好,但我正在寻找是否有其他方法可以解决我的问题。

【问题讨论】:

    标签: oracle


    【解决方案1】:

    我将从完整性检查约束开始:

    ALTER TABLE <table> ADD CONSTRAINT chk_x_z CHECK (X = 1 OR Z IS NOT NULL)
    

    这将确保您的业务规则始终得到执行。

    您将需要一个过程或一个触发器来实现您的自定义default N

    【讨论】:

    • 我可以写检查(列 x = 1 和列 z = a)吗?
    • 从您的问题中不清楚(x,z) 接受哪些值。您必须编写一个约束,对所有行计算为 TRUENULL,对所有禁止值计算为 FALSE
    • 那是我所做的,谢谢你文森特
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多