如何更改主键以在ORACLE中设置默认值DEFAULT SYS_GUID()

时间:2015-06-24 11:10:11

标签: sql oracle alter

我在oracle中创建表,我想为主键添加自动增量

CREATE TABLE "TEST_1"."PERSON" 
   ("ID" NUMBER NOT NULL ENABLE, 
    "FNAME" VARCHAR2(20 BYTE), 
    "LNAME" VARCHAR2(20 BYTE), 
     CONSTRAINT "PERSON_PK" PRIMARY KEY ("ID"));

当我希望alter ID获取主键的自动增量时使用Oracle sql developpe我收到错误ORA-02262:ORA-932

我在表中有两个原始

ALTER TABLE PERSON  
MODIFY (ID DEFAULT SYS_GUID() );

2 个答案:

答案 0 :(得分:0)

(注意:我的答案和示例使用的是Oracle 11g)

问题原因/错误

inconsistent data types时抛出Oracle错误ORA-02262。在您的情况下,在创建表时,您指定ID列的类型为NUMBER

CREATE TABLE "TEST_1"."PERSON" 
("ID" NUMBER NOT NULL ENABLE, ...

Oracle"中的SYS_GUID()函数生成并返回由16个字节组成的全局唯一标识符(RAW值)。然后,文档指出16字节RAW值可以用 32个字符的十六进制表示VARCHAR2(32)表示。

因此,当SYS_GUID()用作Oracle中列的默认值时,结果通常存储为32字节VARCHARVARCHAR2

CREATE TABLE TEST_1.PERSON (
  ID VARCHAR2(32) NOT NULL ENABLE DEFAULT SYS_GUID(),
  ...
);

将(S)

如果更改列的数据类型是合适的解决方案,则下面的代码将成功更改表以将SYS_GUID()值存储为标识符:

ALTER TABLE TEST_1.PERSON MODIFY( 
  ID VARCHAR2(32) DEFAULT SYS_GUID() 
);

如果您的表格中必须有数字值作为ID,那么这里有一个很好的答案:

  

How to create id with AUTO_INCREMENT on Oracle?

答案 1 :(得分:-1)

oracle显示此错误意味着:     // *原因:新列数据类型导致现有列的类型检查错误     //默认值表达式。    // *操作:删除默认值表达式或不更改列    //数据类型。

你没有使用Sequences吗?