gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:08:43 29 4
gpt4 key购买 nike

我在 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"));

当我想更改 ID 以获得主键的自动增量时使用 Oracle sql develope 我收到错误 ORA-02262: ORA-932

我有两个原始表
ALTER TABLE PERSON  
MODIFY (ID DEFAULT SYS_GUID() );

最佳答案

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

问题/错误的原因

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

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

SYS_GUID() Oracle 中的函数“生成并返回一个由 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(),
...
);

解决方案

如果更改列的数据类型是合适的解决方案,下面的代码将成功更改表以存储 SYS_GUID()作为标识符的值:
ALTER TABLE TEST_1.PERSON MODIFY( 
ID VARCHAR2(32) DEFAULT SYS_GUID()
);

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

How to create id with AUTO_INCREMENT on Oracle?

关于sql - 如何更改主键以在 ORACLE 中设置默认值 DEFAULT SYS_GUID(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31024973/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com