如何解决ORA-01758问题而无需删除数据和添加主键

问题描述 投票:0回答:1

我想通过写ALTER TABLE SQL语句向表中添加一列。该列分类为NUMBER数据类型,NOT NULL属性和主键。但它显示ORA-01758。

ALTER TABLE INSURANCE
ADD (INS_ID NUMBER PRIMARY KEY NOT NULL);

如果我选择DEFAULT 0,它确实解决了问题,但是我无法设置主键,并且INS_ID显示0,而不是(空)由于此表的数据来自excel文档,因此在不删除数据的情况下应该如何解决?

如果必须删除数据,如何轻松恢复?

sql oracle ddl
1个回答
0
投票

通常,您可以:

  • 提供默认值,以便oracle可以在创建列时填充列,满足约束条件,或者
  • 将列创建为可为空,用相关数据填充它,然后启用not null限制/使其具有数据后成为主键,或
  • 清空桌子

1不是您的选择,因为如果要将这些值用作主键,则它们必须是唯一的。您可以考虑将列与序列相关联,或将其设为身份列]

如果自动生成的递增数字不如PK(例如,密钥数据已知或已计算出来),则您可能选择2,

3,您已经说过这不是一个选项


请考虑一下持续的维护要求-除非您使用的序列/标识或类似物为其提供唯一值,否则将需要升级每个将数据写入该表的前端应用程序,以了解它具有主键。行。如果有很多要更新的内容,并且您不希望以特定的形式或从其他地方的现有值/关系获得PK,那么拥有自动编号PK可能会有所帮助。如果此数据需要与具有密钥的现有数据相关,则需要升级前端应用程序,以便它们可以尊重新的PK

© www.soinside.com 2019 - 2024. All rights reserved.