Oracle 要修改的列不是标识列
我已经创建了一个列Oracle 要修改的列不是标识列,oracle,identity-column,Oracle,Identity Column,我已经创建了一个列S\u ROLL NUMBER(3)不为空的表,现在我想将此列设为标识列。 我使用了这个命令 alter table students modify ( S_ROLL NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY ); 然后我得到了这个错误 S_ROLL NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY * ERROR at line 4: ORA-30673: column to
S\u ROLL NUMBER(3)不为空的表
,现在我想将此列设为标识列。
我使用了这个命令
alter table students
modify
(
S_ROLL NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY
);
然后我得到了这个错误
S_ROLL NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY
*
ERROR at line 4:
ORA-30673: column to be modified is not an identity column
出现此错误的原因很简单,因为现在不支持将现有列修改为标识列
解决方案是添加一个新列,然后删除现有列(确保您也处理好数据)。因为不支持修改现有列以标识列。所以您可以使用下面的查询来添加新列
ALTER TABLE students ADD (S_ROLL_NEW NUMBER(3) GENERATED ALWAYS AS IDENTITY);
如果不想创建新列,可选择以下解决方案:
CREATE SEQUENCE s_roll_seq
START WITH 1 -- here last id + 1
INCREMENT BY 1;
ALTER TABLE students
MODIFY S_ROLL NUMBER DEFAULT s_roll_seq.NEXTVAL;
希望这能对您有所帮助。@NitinGarg这个问题是关于Oracle的,但您链接的问题是关于MS SQL Server的,所以我想这对OP解决他们的问题没有帮助。您能解释一下吗?为什么数字是新的?对不起我的错误,改变表格学生添加(S_ROLL_新数字(3)总是作为身份生成);你是说我需要新专栏?那么如何复制数据?@UnKnown UPDATE MYTABLE SET NEW\u ID=OLD\u ID;原因可能是什么?现在的解决方案是什么?解决方案是添加一个新列,然后删除现有列(obv确保您也处理数据)。我想不出可能的原因——在发布此功能时,一定做出了某种实现决策。将现有的NOTNULL NUMBER列修改为IDENTITY意味着Oracle需要计算该列中的最高数字,然后从该列开始自动递增。在以最佳方式实现这一点时可能存在某种困难?但只有相关人员才能回答实际原因:)如何将现有表的数据复制到新表?我认为复制单个列的值是不可能的。那么,如何将表中的数据复制到新表中呢?将表创建为新表,如从旧表中选择*;但是,如果只是想将现有列修改为IDENTITY列,只需向现有表中添加一个新列,然后删除现有列。您必须注意引用约束,如果有的话。顺便说一句,要更新新列,只需执行更新您的_Table SET new_column=old_column;