网站建设资讯

NEWS

网站建设资讯

oracle序列怎么连续,oracle 序列重复

oracle sequence如何循环

你这个其实挺复杂的,要建立一系列的东西来满足你这个需求

创新互联建站主要从事成都网站设计、网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务方山,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220

给你做个实验吧

先建立一个表

create table test

(id varchar2(20) not null primary key ,

name varchar2(100));

创建一个序列

create sequence seqTest 

increment by 1 

start with 1 

maxvalue 999

nocycle 

cache 10;

创建一个存储过程,这个很重要,每天半夜12点执行一次,这个主要是把序列重新置0用的,然后还需要定义一个job来调用这个存储过程

create or replace procedure p_seq

as

n number(10);

v_sql varchar2(100);

begin

select seqTest.nextval into n from dual;

n:=-(n-1);

v_sql:='alter sequence seqTest increment by'|| n;

execute immediate v_sql;

select seqTest.nextval into n from dual;

v_sql:='alter sequence seqTest increment by 1';

execute immediate v_sql;

end;

然后创建一个触发器

create or replace trigger t_test       

before insert on test       

for each row       

begin       

select to_char(sysdate,'yyyymmdd')||'_'||lpad(seqTest.nextval,3,0) into :new.id from dual;     

end ;

存储过程我没测试,但是编译能过去

现在做个试验

执行这样一个语句

insert into test(name) values ('aa');

然后你检查下数据,然后继续插入再看看

select * from test;

如何使用Oracle序列

如何使用Oracle序列:

Oracle序列(sequence)是一种数据库项,能够生成一个整数序列。通常用于填充数字类型的主键列。

1、创建序列:

CREATE SEQUENCE sequence_name

[START WITH start_num]

[INCREMENT BY increment_num]

[{MAXVALUE maximum_num|NOMAXVALUE}]

[{MINVALUE minimum_num|NOMINVALUE}]

[{CYCLE|NOCYCLE}]

[{CACHE cache_num|NOCACHE}]

[{ORDER|NOORDER}]

其中:

start_num:序列开始整数

increment_num:每次增加的整数增量

maximum:序列最大整数

minimum:序列最小整数

CYCLE:循环生成

NOCYCLE:不循环生成,默认值

cache_num:保存在内存中的整数的个数

NOCACHE:不缓存任何整数

例如:

CREATE SEQUENCE seq_test;(默认值)

CREATE SEQUENCE seq_test START WITH 1 INCREMENT BY 2;

2、使用序列:

SELECT seq_test.nextval FROM dual;

insert into order_status2 (id) values (seq_test.nextval);

3、修改序列:

ALTER SEQUENCE语句来修改序列。可以修改的内容:

不能修改序列的初值

序列的最小值不能大于当前值

序列的最大值不能小于当前值

例如:ALTER SEQUENCE seq_test INCREMENT BY 3;

4、删除序列:

DROP SEQUENCE seq_test;

oracle sequence产生的值不连续

sequence 本身是不能保证连续的,譬如你用insert语句插入一个sequence number,之后在将这个操作rollback掉,这个时候sequence就丢失了1次。

oracle创建序列的语法

--创建序列的语法 --

CREATE SEQUENCE SEQ_POS_ORDER_ONLINE_ID

INCREMENT BY 1

START WITH 1000000000000042 -- 从1开始计数 或 MINVALUE 1 或 NOMINVALUE --的设置最小值 不设置最小值

NOMAXvalue -- 不设置最大值 或 MAXVALUE 10 --设置最大值 10

NOCYCLE -- 一直累加,不循环 或

CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE

在oracle中建表的时候用的是自动编号, 删除某些记录后如何恢复自动编号的序列号使其连续而不跳号?

如果使用了序列,那么这个跳号的问题只能通过编程来解决,否则是解决不了的。Oracle的序列对象只增加。

可以通过一个触发器来实现序列号字段的处理,一旦插入新数据,就根据扫描的结果,修改序列号字段的值为最大值+1,或者某个值,根据定义的规则确定。

有的财务系统凭证号必须连续,当中间的某一张凭证删除后就有这种需求,要求新产生的凭证号等于删除的那一张。

如何让oracle自动增长的序列到一定时间自动重新开始增长?

做一个存储过程,drop此序列,重建序列

做一个Oracle Job,按照你指定时间调度。


新闻标题:oracle序列怎么连续,oracle 序列重复
URL标题:http://cdweb.net/article/hcposo.html