Oracle里面想实现自动插入递增的序号
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle里面想实现自动插入递增的序号相关的知识,希望对你有一定的参考价值。
insert into table1(serialno,name) select '111' SerialNo,name from table2
但是,SerialNo当然应该是递增的,每次执行都从1开始
不想写匿名块
有这样的语法实现吗?
数据表信息为 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 这种写法,不能使用游标进行循环。
如果你想从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试了,手动帖能递增,但是用替换就不行了.谁能解答一下