ORACLE:如何使用现有的空值更改表默认值

ORACLE:如何使用现有的空值更改表默认值,oracle,nullable,alter,Oracle,Nullable,Alter,我有一个空值的可空列,我想为表中的新插入添加一个默认约束 我的密码: alter table customer_02 modify reference default on null 'No References'; 我不断收到错误ORA-02296,这意味着表中预先存在空值,因此无法启用新的默认值。如何仅插入新插入的默认值而不影响以前的数据 运行 Update customer_02 set reference = 'No references' where reference is nul

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

我的密码:

alter table customer_02
modify reference default on null
'No References';
我不断收到错误ORA-02296,这意味着表中预先存在空值,因此无法启用新的默认值。如何仅插入新插入的默认值而不影响以前的数据

运行

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

整个柱必须符合约束条件;您不能让旧数据保持为null,然后安装“notnull”规则。您的意思是references列可以包含“no references”,因为它曾经包含null(意思是“no reference”),所以更新那些旧的null值应该不会有任何伤害,这样它们就与新规则一致,然后您就可以实现新规则了

如果您迫切希望旧的行保持为null,而新行不能为null,则需要使用(插入前)触发器,该触发器在:new.reference列为null时引发错误,并将该列保留为null。我之所以避免这样做有两个原因,一个原因是它使用触发器,而触发器通常是完成事情的糟糕方式;另一个原因是它建立了一种似乎不必要的不一致性,这将困扰未来的开发人员。如前所述,如果null已不再是表示没有引用的首选方式,则应调整旧数据。如果前端需要一个值,那么将其保持为空也可能会导致其他地方的错误-当用户调用旧记录时,您可能会遇到崩溃


我建议在数据建模中始终保持一致性,即使这意味着最终要调整旧数据

,你是对的,更改以前的空值最终会使这更容易,更有意义。非常感谢。