【问题标题】:Add auto generated key to existing PK in Oracle将自动生成的密钥添加到 Oracle 中的现有 PK
【发布时间】:2016-04-13 16:19:50
【问题描述】:

我正在将基于 SQL Server 的应用程序移植到 Oracle。我们的 Oracle DBA 给了我一个应该与原始 SQL Server 模式相同的模式(并从它生成),但是缺少自动生成的键。我正在尝试将这些表 PK 从正常的 INT 更改为递增。我正在使用 Oracle SQL Developer 4.0.3 和 Oracle 12c 这样做。

我收到的错误是ORA-01442: column to be modified to NOT NULL is already NOT NULL 在编辑表格、选择列并将其身份下拉列表设置为“生成为身份”后,我得到了这个。我不确定为什么 SQl Developer 在它已经是 PK 时试图使其不为空。

我的问题是:这是设置生成密钥的正确方法吗?我怎样才能解决这个问题?如果我去更改所有必需的列,DBA 是否可以使用模式来重新生成他首先用来创建它的任何过程,以允许正确生成密钥,是否有更好的解决方案来创建一个好的模式以继续前进?

谢谢。

【问题讨论】:

    标签: sql oracle plsql oracle12c


    【解决方案1】:

    如果该列已定义为 NOT NULL,则无需将其重新定义为 NOT NULL。因此,您会收到错误 ora-01442。

    在 SQL Server 中获取序列值(例如标识)的最佳方法是在插入行之前使用默认序列定义列:

    CREATE SEQUENCE SEQ_NAME
    START WITH     1
    INCREMENT BY   1
    NOCACHE
    NOCYCLE;
    
    ALTER TABLE table_name MODIFY column_name INT DEFAULT SEQ_NAME.NEXTVAL;
    

    PD:此默认值适用于 12 c。到11g以下,必须创建触发器

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-28
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 2016-03-26
      • 2016-03-25
      相关资源
      最近更新 更多