虽然结贴了,我也补充一下: 1. 这里字段不能设定序列为默认值。官网解释: Restriction on Default Column Values , A DEFAULT expression cannot contain references to PL/SQL functions or to other columns, the pseudocolumns CURRVAL, NEXTVAL, LEVEL, PRIOR, and ROWNUM, or date constants that are not fully specified. 创建完之后,可以通过触发器在字段上使用序列。 2.5楼的方法有个缺陷: 如果再往里插入数据的话,id还是没有值的,还要update一下。直接使用触发器,一次搞定。希望对楼主有帮助。
我使用的是方法2,
原因是 oracle 数据库不存在自增长字段
create sequence seq_a_id
minvalue 1
maxvalue 999999999999999
start with 1
increment by 1
nocache;
update a set id = seq_a_id.nextval
--创建序列器
CREATE SEQUENCE ID_seq
START WITH 1
INCREMENT BY 1
MINVALUE 1
NOMAXVALUE
ORDER
NOCACHE
NOCYCLE;
--创建新表
create table PROJECT_COLUMN_COPY(
id int primary key default ID_seq.nextval,
COLUMN01 varchar2(20),
COLUMN02 varchar2(20),
COLUMN03 number(9,3),
...
)
--转移数据
insert into PROJECT_COLUMN_COPY (COLUMN01 ,COLUMN02 ,COLUMN03 ,... )
select * from PROJECT_COLUMN;
--删除旧表
drop table PROJECT_COLUMN;
--修改表名
alter table PROJECT_COLUMN_COPY rename to PROJECT_COLUMN;有问题请大家提出来...
1.
这里字段不能设定序列为默认值。官网解释:
Restriction on Default Column Values , A DEFAULT expression cannot contain references to PL/SQL functions or to other columns, the pseudocolumns CURRVAL, NEXTVAL, LEVEL, PRIOR, and ROWNUM, or date constants that are not fully specified.
创建完之后,可以通过触发器在字段上使用序列。
2.5楼的方法有个缺陷: 如果再往里插入数据的话,id还是没有值的,还要update一下。直接使用触发器,一次搞定。希望对楼主有帮助。