我在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() );
答案 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字节VARCHAR
或VARCHAR2
:
CREATE TABLE TEST_1.PERSON (
ID VARCHAR2(32) NOT NULL ENABLE DEFAULT SYS_GUID(),
...
);
如果更改列的数据类型是合适的解决方案,则下面的代码将成功更改表以将SYS_GUID()
值存储为标识符:
ALTER TABLE TEST_1.PERSON MODIFY(
ID VARCHAR2(32) DEFAULT SYS_GUID()
);
如果您的表格中必须有数字值作为ID,那么这里有一个很好的答案:
答案 1 :(得分:-1)
oracle显示此错误意味着: // *原因:新列数据类型导致现有列的类型检查错误 //默认值表达式。 // *操作:删除默认值表达式或不更改列 //数据类型。
你没有使用Sequences吗?