oracle 数据库 数据表自动生成序号 怎么添加??

oracle 数据库 数据表自动生成序号 怎么添加??,第1张

需要先创建序列然后nextval添加数据使其自动生成序号。 1、创建表: create table test(id int,name varchar2(20))2、创建序列: Create sequence seq_test_idIncrement by 1Start with 1Maxvalue 999999Minvalue 1Nocyclenocache3、插入数oracle 数据库 数据表自动生成序号 怎么添加??

ORACLE的编号和SQL SERVER的不同。SQL SERVER可以设置一个值为自增。

ORACLE需要先建立一个SEQUENCE,然后用NEXTVAL。

一楼的回答可以满足从2009030001开始自增,但是无法实现每月更改。比如说数据量较小,很可能已经5月了,还在2009031999 什么的。

正确的做法是,建立一个1-9999的整数循环序列,然后加上日期值。

CREATE SEQUENCE DATE_SEQ

START WITH 1 --起始值(默认为1可省略)

INCREMENT BY 1 --可省略(默认为1可省略)

MAXVALUE 9999 --最大值

CYCLE --循环

NOCACHE --不缓存(可避免产生值不连续的情况)

ORDER --保证按次序产生值

有了1-9999的循环序列,我们就可以

TO_CHAR(DATE_SEQ.NEXTVAL)先将其转换为字符形式。

然后

LPAD(TO_CHAR(DATE_SEQ.NEXTVAL),4,'0')对其进行4位加'0'补齐长度。例如2,补齐为0002。

然后加上插入的日期(只要年月)

TO_CHAR(SYSDATE,'YYYYMM')||LPAD(TO_CHAR(DATE_SEQ.NEXTVAL),4,'0')

然后就可以进行INSERT或者是其他 *** 作。这也是生产中用于生成带字符或日期ID流水号的标准方法。注意序列中的NOCACHE和ORDER是为了保证序列的连续和次序,如果这方面要求不严格,只是为了确保唯一性,可以用CACHE和NOORDER获得好一点的性能。一般来说ID只要求保证唯一就可以了。

从数学来说,有固定长度的数字编码都无法保证唯一性(数据量大了以后都会超越,比如说一共4位,数据量有10000,使用循环编码就肯定有重复)。对于ID来说有主键约束,对于非ID的其他编码,必须设置UNIQUE约束。

然后对于插入的单条数据:

INSERT INTO 表名(编号,字段1,字段2,字段3....)

VALUES(TO_CHAR(SYSDATE,'YYYYMM')||LPAD(TO_CHAR(DATE_SEQ.NEXTVAL),4,'0'),字段1,字段2,字段3...)

对于对一个整表统一加编号:

CREATE TABLE 编号后的新表 AS

SELECT TO_CHAR(SYSDATE,'YYYYMM')||LPAD(TO_CHAR(DATE_SEQ.NEXTVAL),4,'0') AS 编号,A.* FROM 编号前的表 A


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9996361.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存