【问题标题】:ORACLE: How to alter table defaults with existing NULL valuesORACLE:如何使用现有的 NULL 值更改表默认值
【发布时间】:2020-03-12 20:17:24
【问题描述】:

我有一个可以为空的列,其中包含空值,我想为表中的新插入添加一个默认约束。

我的修改代码:

alter table customer_02
modify reference default on null
'No References';

我不断收到错误 ORA-02296 的意思,我的表中预先存在空值,因此我无法启用我的新默认值。如何仅为新插入插入默认值而不影响以前的数据?

【问题讨论】:

    标签: oracle nullable alter


    【解决方案1】:

    运行

    Update customer_02 set reference = 'No references' where reference is null
    

    第一

    整个列必须遵守约束;您不能让旧数据保持为空,然后安装“非空”规则。你是说引用列包含“无引用”是可以的,它曾经包含 null(意思是“无引用”),所以更新那些旧的 null 值应该没有任何危害,因此它们与新的一致规则,那么你就可以执行新规则了

    如果您迫切希望旧行保持为空,而新行不能为空,则需要使用(插入前)触发器,如果​​ :new.reference 列为空,则该触发器会引发错误,并将该列保留为可以为空。我会避免这种情况有两个原因,一个是它使用触发器,而且它们通常是完成工作的不好方法,另一个是因为它建立了一个看似不必要的不​​一致,这会让未来的开发人员感到困惑。如前所述,如果 null 作为表示没有引用的方式已经失宠,则应调整旧数据。如果前端需要一个值,将其保持为空也可能会在其他地方出现错误 - 您最终可能会导致用户在调用旧记录时遇到崩溃。

    我建议始终争取数据建模的一致性,即使这意味着调整旧数据

    【讨论】:

    • 最后,你是对的,改变以前的空值会让这最终变得更容易,更有意义。谢谢!
    猜你喜欢
    • 2017-07-01
    • 1970-01-01
    • 2011-04-18
    • 2011-03-12
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多