ORACLE:如何使用现有 NULL 值更改 table 默认值

ORACLE: How to alter table defaults with existing NULL values

我有一个具有空值的可空列,我想为 table 中的新插入添加一个默认约束。

我的更改代码:

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

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

运行

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

第一个

整列都必须符合约束条件;您不能让旧数据保持为空,然后安装 "not null" 规则。您是说引用列包含 "no references" 是可以的,它曾经包含 null(意思是 "no reference"),因此更新那些旧的空值应该没有任何危害,因此它们与新规则,那么你可以执行新规则

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

我建议始终努力保持数据建模的一致性,即使这意味着调整旧数据