此命令与现有表和序列一起使用时会失败,并显示ORA 02262错误,同时类型检查列默认表达式
MESSAGES TABLE INFO
ID NUMBER(38) Primary Key
ALTER TABLE MESSAGES MODIFY
ID DEFAULT MESSAGES.SEQ.NEXTVAL
无论如何我都能做到
CREATE SEQUENCE TEST_SEQ;
CREATE TABLE TEST
(ID NUMBER NOT NULL,
NAME VARCHAR2)
然后
ALTER TABLE TEST MODIFY
(ID DEFAULT TEST_SEQ.NEXTVAL
它会成功的
主要目标是不再使用序列和触发器的组合来帮助填充ID,而是转向更接近这里所述的IDENTITY概念
Oracle 12c: How can I modify an existing primary key column to an identity column?
1.我不相信有一个类型检查问题,因为序列应该返回一个NUMERIC值,这是进入一个列类型是NUMERIC?
1.赠款应该是确定的,因为插入数据到消息表使用“老办法”与序列和触发器。
ALTER TABLE MESSAGES MODIFY
ID DEFAULT MESSAGES.SEQ.NEXTVAL
无论如何我都能做到
CREATE SEQUENCE TEST_SEQ;
CREATE TABLE TEST
(ID NUMBER NOT NULL,
NAME VARCHAR2)
然后
ALTER TABLE TEST MODIFY
(ID DEFAULT TEST_SEQ.NEXTVAL
它会成功的
1条答案
按热度按时间nszi6y051#
对不起,我不太明白你想说什么。
标题建议您使用Oracle 19。它支持标识列,那么-为什么不使用该功能呢?请注意,Oracle将在后台创建一个序列,所以如果你认为你会摆脱一个序列-不,你不会。但你不需要触发器,没错。
如果你按你的方式做,为什么你认为它应该起作用?
序列必须存在才能作为默认值;我不认为Oracle会以这种方式为您创建一个:
因此,从我的Angular 来看,一切都像预期的那样工作。如果我错了,请解释为什么你认为我错了,如果可能的话,提供不同的文件。