Oracle里面想实现自动插入递增的序号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle里面想实现自动插入递增的序号相关的知识,希望对你有一定的参考价值。

insert into table1(serialno,name) select '111' SerialNo,name from table2

但是,SerialNo当然应该是递增的,每次执行都从1开始
不想写匿名块
有这样的语法实现吗?

Oracle中不向其它数据库一样,有自动增长型数据类型,但可以变通处理
数据表信息为 Test(TID,TNAME),需要把TID设置为自动增值型字段,TID一般是int型
首先 新建一个序列AUTOID,以后其它表或触发器也可调用:
起始为1 增值为1 顺序增值

CREATE SEQUENCE AUTOID
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
CACHE 10;

然后建立触发器代码如下:
Test表 TID字段 AUTOID序列 不要更改DUAL临时表名
CREATE TRIGGER TRG_AutoID BEFORE
INSERT ON TEST
FOR EACH ROW begin
SELECT AUTOID.NEXTVAL
INTO :NEW.TID
FROM DUAL;
End TRG_AutoID;

最后SQL测试 insert into Test(tname) values('abc');
当然也可以采用 insert into Test(TID,tname) values(AUTOID.nextval,'libin');
在选择Select时,注意有两对:
AUTOID.currval 表示当前行的ID值
AUTOID.nextval 表示当前行的ID+1值
例:SELECT empseq.currval FROM DUAL;追问

谢谢你的回答。
不过我的表还是有这样的问题:
表是用四个字段作为联合主键,这个增长字段是主键之一。
这个字段的值不是每次都在基础上增加。
比如我 执行一次 insert into ... select 这个字段是从1开始insert递增的,比如说递增到100
但是我下次执行 这个语句的时候,不是从100 开始,而是又从1开始的。

由于字段不确定原因,后面的只能 用insert into 。。select 这种写法,不能使用游标进行循环。

参考技术A 使用ROWNUM 这样每次插入的时候都是根据行数来重新生成的这个值。
如果你想从1开始。那就INSERT INTO ... select ROWNUM AS ID.....
从2开始就 INSERT INTO ... select ROWNUM+1 AS ID.....本回答被提问者采纳
参考技术B CREATE OR REPLACE TRIGGER pa_TRG
BEFORE INSERT OR UPDATE OF 自增列
ON 表名
FOR EACH ROW
BEGIN
IF INSERTING THEN
SELECT 序列.NEXTVAL INTO :NEW.自增列 FROM DUAL;
ELSE
RAISE_APPLICATION_ERROR(-20020, '不允许更新ID值!');
END IF;
END;

这个是俺们主管写的触发器 你试试看,我这儿就行

以上是关于Oracle里面想实现自动插入递增的序号的主要内容,如果未能解决你的问题,请参考以下文章

word怎么使序号递增?是文档,不是表格.我用seq \n 0试了,手动帖能递增,但是用替换就不行了.谁能解答一下

oracle数据库插入一ID字段,如何让他从一开始递增?

SQL java获取分配给自动递增主键的值[重复]

如何让SELECT 查询结果额外增加自动递增序号sqlserver

Sublime Text 3在行前插入递增数字序号的方法

怎样在SQl数据库的表格里添加“序号”表示字段