Oracle序列的创建
oracle中select中的nextval用法
一、什么是Oracle中的nextval函数?在Oracle数据库中,nextval是一个用于获取序列(sequence)下一个值的函数。
序列是Oracle数据库中一个自增的数值序列。
在实际应用中,我们经常需要使用自增的序列来作为表的主键或者其他唯一标识。
而nextval函数就是用来获取这个序列的下一个值的。
二、nextval函数的使用方法1. 创建序列在使用nextval函数之前,我们需要先创建一个序列。
创建序列的语法如下:```sqlCREATE SEQUENCE sequence_nameSTART WITH start_valueINCREMENT BY increment_value;```其中,sequence_name是序列的名称,start_value是序列的起始值,increment_value是序列的递增步长。
2. 使用nextval函数一旦序列创建完成,我们就可以使用nextval函数来获取序列的下一个值了。
nextval函数的语法如下:```sqlSELECT sequence_name.NEXTVAL FROM dual;```其中,sequence_name是之前创建的序列的名称。
在使用nextval函数时,需要在序列的名称后面加上.NEXTVAL来获取序列的下一个值。
关键字dual是一个虚拟表,用来在没有实际表的情况下执行一些简单的SQL语句。
三、nextval函数的注意事项1. 每次调用nextval函数,序列的值都会自动加上步长的值。
在使用nextval函数之前,需要确保序列的步长设置是正确的,不会导致序列值的跳变或者重复。
2. nextval函数只能用于获取序列的下一个值,无法获取当前值或者上一个值。
如果需要获取当前值或者上一个值,可以使用currval函数来实现。
3. 在实际应用中,需要格外小心使用nextval函数,避免因为序列的不正确使用而导致数据的混乱或错误。
oracleSEQUENCE创建,修改,删除
oracleSEQUENCE创建,修改,删除oracle创建序列化:CREATE SEQUENCE seq_itv_collectionINCREMENT BY 1 -- 每次加⼏个START WITH 1399 -- 从1开始计数NOMAXVALUE -- 不设置最⼤值NOCYCLE -- ⼀直累加,不循环CACHE 10;oracle修改序列化:Alter Sequence.如果想要改变 start值,必须 drop sequence 再 re-create .Alter sequence 的例⼦ALTER SEQUENCE emp_sequenceINCREMENT BY 10MAXVALUE 10000CYCLE -- 到10000后从头开始NOCACHE ;Oracle删除序列化:DROP SEQUENCE seq_itv_collection;需要注意的是:想改变序列化的minvalue必须删除序列化后再重新建⽴序列化。
不可以修改序列化的minvalue。
在oracle中sequence就是序号,每次取的时候它会⾃动增加。
sequence与表没有关系。
1、Create Sequence⾸先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限。
创建语句如下:CREATE SEQUENCE seqTestINCREMENT BY 1 -- 每次加⼏个START WITH 1 -- 从1开始计数NOMAXvalue -- 不设置最⼤值NOCYCLE -- ⼀直累加,不循环CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE2、得到Sequence值定义好sequence后,你就可以⽤currVal,nextVal取得值。
CurrVal:返回 sequence的当前值NextVal:增加sequence的值,然后返回增加后sequence值得到值语句如下:SELECT Sequence名称.CurrVal FROM DUAL;如得到上边创建Sequence值的语句为:select seqtest.currval from dual在Sql语句中可以使⽤sequence的地⽅:- 不包含⼦查询、snapshot、VIEW的 SELECT 语句- INSERT语句的⼦查询中- INSERT语句的values中- UPDATE 的 SET中如在插⼊语句中insert into 表名(id,name)values(seqtest.Nextval,'sequence 插⼊测试');注:- 第⼀次NEXTVAL返回的是初始值;随后的NEXTVAL会⾃动增加你定义的INCREMENT BY值,然后返回增加后的值。
oracle序列创建语句
oracle序列创建语句Oracle是一种关系型数据库管理系统,提供了多种创建序列的语句。
下面列举了10个常用的Oracle序列创建语句,以及对每个语句的详细解释。
1. CREATE SEQUENCE语句:CREATE SEQUENCE语句用于创建一个新的序列。
序列是一种自增的数字,可用于生成唯一的标识符或主键值。
以下是CREATE SEQUENCE语句的示例:```sqlCREATE SEQUENCE seq_id START WITH 1 INCREMENT BY 1; ```该语句创建了一个名为seq_id的序列,起始值为1,每次递增1。
2. CREATE SEQUENCE...MINVALUE语句:CREATE SEQUENCE...MINVALUE语句用于指定序列的最小值。
以下是CREATE SEQUENCE...MINVALUE语句的示例:```sqlCREATE SEQUENCE seq_id START WITH 1 INCREMENT BY 1 MINVALUE 1;```该语句创建了一个名为seq_id的序列,起始值为1,每次递增1,最小值为1。
3. CREATE SEQUENCE...MAXVALUE语句:CREATE SEQUENCE...MAXVALUE语句用于指定序列的最大值。
以下是CREATE SEQUENCE...MAXVALUE语句的示例:```sqlCREATE SEQUENCE seq_id START WITH 1 INCREMENT BY 1 MAXVALUE 100;```该语句创建了一个名为seq_id的序列,起始值为1,每次递增1,最大值为100。
4. CREATE SEQUENCE...CYCLE语句:CREATE SEQUENCE...CYCLE语句用于指定序列的循环方式。
当序列达到最大值后,会重新从最小值开始递增。
以下是CREATE SEQUENCE...CYCLE语句的示例:```sqlCREATE SEQUENCE seq_id START WITH 1 INCREMENT BY 1 MAXVALUE 10 CYCLE;```该语句创建了一个名为seq_id的序列,起始值为1,每次递增1,最大值为10,循环方式为循环。
oracle创建表、序列、索引和视图
创建序列
获取有关序列的信息
使用序列 序列生产一系列数字,一个序列中包含两个伪列,分别是currval、nextval,可 以分别用来获取该序列的当前值和下一个值。 在检索序列的当前值之前,必须通过检索序列的下一个值对序列进行初始化。
第一次访问时 被初始化为1
使用next会让序列的数值增加。
对于升序序列来说到达最 大值以后,返回到最小值。
oracle创建表序列索引和视图
表 创建表 create [global temporary] table table_name( column_name type [constraint constraint_def default default default_exp] [,column_name type [constraint constraint_def default default default_exp]….] ) [on commit{delete|preserve} rows] tablespace tab_space; 1、global temporary:临时表,行的有效性取决于on commit后面的选项。 2、on commit:控制临时表中行的有效性。 delete:说明这些行在事务的末尾要被删除。 preserve:说明这些行在会话的末尾要被删除。 如果为临时表指定on commit,那么默认是delete。
添加CHECK约束
对于check约束来说,括号里面是一个表达式,可以非常的 复杂,因此check的功能非常的强大。
添加NOT NULL约束
添加not null约束没有使用add而使用了modify。
没有为约束指定名字,系统自动生成一个约束的名字。我们建议为约束指定有 意义的名字,将来在发生约束冲突的时候,根据系统提示我们可以清楚的判断 是那个数值出现了问题。
零点起飞学Oracle之序列
高性能
Oracle序列的性能非常高,可 以快速生成大量的唯一数字。
02
Oracle序列的创建
创建序列的语法
• 创建序列的基本语法:CREATE SEQUENCE sequence_name [START WITH start_value] [INCREMENT BY increment] [MINVALUE minvalue] [MAXVALUE maxvalue] [CACHE cache] [NOORDER] [CYCLE] [RESTART]
修改序列的起始值
使用`ALTER SEQUENCE sequence_name RESTART WITH start_value;`命令修改序列的起始值。
修改序列的最大值和最小值
使用`ALTER SEQUENCE sequence_name MAXVALUE max_value MINVALUE min_value;`命令修改序列的最大值和
创建序列的语法
START WITH:指定序列的起 始值。
INCREMENT BY:指定序列 的增量。
MINVALUE:指定序列的最小 值。
创建序列的语法
01
MAXVALLeabharlann E:指定序列的最大值。02
CACHE:指定预先分配给序列的内存缓冲区的大小。
NOORDER:指定序列不保证顺序。
03
创建序列的语法
02
合理设置缓存过期 时间
根据实际情况设置缓存的过期时 间,避免因缓存过期导致的问题。
03
缓存策略选择
根据实际需求选择合适的缓存策 略,如LRU(最近最少使用)等, 以提高性能。
Oracle数据库中序列(SEQUENCE)的用法详解
在Oracle数据库中,什么是序列呢?它的用途是什么?序列(SEQUEN CE)其实是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。
其主要的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值。
创建序列需要C REAT E SEQUEN CE系统权限。
序列的创建语法如下:CREATE SEQUEN CE 序列名 [INCREM ENT BY n] [STARTWITH n] [{MAXVAL UE/ MINVAL UE n|NOMAXV ALUE}] [] [{CACHEn|NOCACH E}];INCREM ENT BY 用于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表序列的值是按照此步长递减的。
STARTWITH 定义序列的初始值(即产生的第一个值),默认为1。
MAXVAL UE 定义序列生成器能产生的最大值。
选项NOMA XVALU E是默认选项,代表没有最大值定义,这时对于递增序列,系统能够产生的最大值是10的27次方;对于递减序列,最大值是-1。
MINVAL UE定义序列生成器能产生的最小值。
选项NOMA XVALU E是默认选项,代表没有最小值定义,这时对于递减序列,系统能够产生的最小值是?10的26次方;对于递增序列,最小值是1。
CYCLE和NOCYC LE 表示当序列生成器的值达到限制值后是否循环。
C YCLE代表循环,NOCYCL E代表不循环。
如果循环,则当递增序列达到最大值时,循环到最小值;对于递减序列达到最小值时,循环到最大值。
如果不循环,达到限制值后,继续产生新值就会发生错误。
CACHE(缓冲)定义存放序列的内存块的大小,默认为20。
Oracle序列的创建和使用
Oracle序列的创建和使⽤1.创建序列语法:create sequence 序列名 [可选参数](序列名常定义为‘seq_XXX’的形式,创建序列不能使⽤replace)可选参数说明:increment by:序列每次增加的值,负数表⽰递减,缺省值为1;start with:序列的初始值,缺省值为1;maxvalue:序列可⽣成的最⼤值,缺省值为nomaxvalue,即不设置最⼤值;系统能产⽣的最⼤值为10的27次⽅;minvalue:序列可⽣成的最⼩值,缺省值为nominvalue,即不设置最⼩值;cycle:定义当序列达到最⼤/⼩值后是否循环,缺省值为不循环;nocycle:不循环;cycle:循环;如果不使⽤循环达到限制值后继续产⽣新值就会出错;使⽤循环达到最⼤值后的下⼀个值为1,和start with设置的值⽆关,递增还是increment by设置的值;cache:定义缓存序列的个数,缺省值为20,nocache表⽰不设置缓存;使⽤缓存可以提⾼序列的性能,但数据库出错时会造成数据丢失使序列不连续;例:创建⼀个循环不使⽤cache的序列create sequence seq_useridincrement by 1start with 1maxvalue 99999cyclenocache;2.序列的使⽤语法:序列名.[currval/nextval]currval:表⽰当前值,新序列若没使⽤过nextval不能直接使⽤当前值,会报错;nextval:表⽰序列的下⼀个值例:查询序列的值select seq_name.nextval from dual; --序列seq_name的下⼀个值例:SQL语句中使⽤序列insert into 表名 value(seq_name.currval)3.删除修改序列语法:drop sequence [⽤户名.]序列名alert sequence [⽤户名.]序列名 [可选参数]例:删除序列dorp sequence seq_name;例:修改序列alert sequence seq_nameincrement by 10nomaxvaluenocyclecache 10(修改序列只能修改这⼏个值,不能修改初始值)4.查看所有序列查看当前⽤户下的所有序列:select * from user_sequences;查看所有⽤户下的所有序列:select * from all_sequences;还有⼀个select * from dba_sequences;。
Oracle数据库——索引、视图、序列和同义词的创建
Oracle数据库——索引、视图、序列和同义词的创建⼀、涉及内容 1.理解索引的概念和类型。
2.掌握创建索引的命令。
3.理解视图的概念和优点。
4.理解可更新视图应具备的特点。
5.掌握创建⼀般视图和可更新视图的命令。
6.理解序列和同义词的概念和作⽤。
7.掌握序列的创建与应⽤。
8.掌握同义词的创建与应⽤。
⼆、具体操作(实验)1.在数据库中创建Student表,包括学号Id、姓名Name、性别Sex、班级编号Class_id。
利⽤该表创建如下索引:(1)在Id字段上创建唯⼀的B树索引。
(2)在Name字段上创建普通的B树索引。
(3)在Sex 字段上创建位图索引。
语句:--建表:create table Student(Id char(6),Name varchar2(8),Sex char(2),Class_id char(4));create unique index index_id on Student(Id);create index index_name on Student(Name);create bitmap index index_sex on Student(Sex);截图:2.利⽤scott.emp 表创建视图并完成以下操作:(1)创建简单视图。
语句:conn scott/tiger;grant insert,update,delete on emp to system;conn system/orcl1234;create or replace VIEW v_empasselect empno,ename,job,hiredate,deptnofrom scott.emp;截图:(2)查看视图的结构。
语句:SQL> desc v_emp;截图:(3)从视图中查询数据。
语句:SQL> select * from v_emp where deptno=10;截图:(4)查看视图中各字段的可更新性。
ORACLE数据库实现自增的两种方式
ORACLE数据库实现⾃增的两种⽅式Mysql数据库因为其有⾃动+1,故⼀般我们不需要花费太多时间,直接⽤关键字auto_increment即可,但是Oracle不⾏,它没有⾃动增长机制。
顾我们需要⾃⼰去实现。
⼀般有两种⽅式,但是这两种⽅式都与序列化有关。
第⼀种⽅式:序列化+触发器;第⼆种⽅式:序列化+显⽰调⽤序列化。
⼀般我选⽤第⼀种⽅式。
因为我们只要建⽴好序列化+触发器,这样我们就需要太多的去关注这个字段了,触发器会在我们插⼊数据时⾃动触发,帮助我们进⾏+1操作。
这正好解决了我最近做的⼀个mini项⽬中的部门删除操作(⼦部门与⽗部门),因为我们知道⽗部门总是先于⼦部门存在于数据库中,如果我们额外建⼀个字段去记录插⼊数据的先后顺序,这样我们在做删除时,只要让⼦部门先于⽗部门删除,这样就不会存在因为批量删除部门,因删除⽗部门递归删除⼦部门,再删⼦部门时发现没有⼦部门的存在了⽽报异常。
好了案例说完了。
现在来在oracle数据库中具体实现⾃增1的操作。
准备⼯作建表://准备⼯作创建⼀张表create table dept_p(dept_id VARCHAR2(40) not null,dept_name VARCHAR2(40),parent_id VARCHAR2(40),state NUMBER(11),dept_sort NUMBER(11));alter table DEPT_P add [constraint dept_id] primary key(dept_id);⽅式⼀:序列化+触发器第⼀步:创建序列sequencecreate sequence seq_t_deptminvalue 1maxvalue 99999999start with 1increment by 1cache 50第⼆步:建⽴触发器create or replace trigger "dept_trig"before insert on dept_preferencing old as old new as new for each rowdeclarebeginselect seq_t_dept.nextval into :new.dept_sort from dual;end dept_trig;第三步:插⼊数据测试看dept_sort是否⾃增insert into dept_p values('001', '安保部', '000', 1);select * from dept_p;⽅式⼆:序列化+显⽰调⽤第⼀步:创建序列sequence//创建sequencecreate sequence seq_on_deptincrement by 1start with 1nomaxvaluenocyclenocache;第⼆步:显⽰调⽤序列insert into dept_p values('001', '安保部', '000', 1, seq_on_test.nextval);第三步:查询进⾏查看 select * from dept_p注://查看序列当前值和下⼀个值的查看⽅式select seq_on_dept.currval from dual;select seq_on_dept.nextval from dual;总结:create sequence 序列名[increment by n][start with n][{maxvalue/minvalue n | nomaxvalue}] [{cycle|nocycle}][{cache n | nocache}];。
oracle数据库ID自增长--序列
oracle数据库ID⾃增长--序列什么是序列?在mysql中有⼀个主键⾃动增长的id,例如:uid number primary key auto_increment;在oracle中序列就是类似于主键⾃动增长,两者功能是⼀样的,只是叫法不同⽽已。
在oracle中想要实现id⾃动增长只能⽤序列来实现。
在oracle中,是将序列装⼊内存,可以提⾼访问效率。
1.)序列的创建 create sequence 序列名称 increment by n 每次增长多少 //系统默认值为1. start with n从⼏开始 //系统默认值为1. [maxvalue n最⼤值|nomaxvalue] //NoMaxValue:是系统对序列设置的默认值. 即指定升序序列的最⼤值为10的27次⽅.降序序列的最⼤值为-1. [minvalue n最⼩值|nominvalue] //同上 [cycle |nocycle 是否循环] [cache n缓存的数量|nocache] //指定要保留在内存中整数的个数.默认缓存的格式为20个. 可以缓存的整数最少为2个. 可以缓存的整数个数最多为:Cell(maximum_num—minimum_num)/ABS(increment_num). 注:Cell(序列的最⼤上限值—最⼩下限值,)/ABS(每次⾃增的增量).例如:create sequence person_pid_seq increment by 1 start with 1 maxvalue 1000 nocycle nocache; 可以直接创建,其他的选项全部是默认值。
例如:create sequence person_pid_seq;2.)序列的操作序列创建完成之后,所有的⾃动增长就都是由我们⾃⼰操作了,那么如果操作呢?提供了两种⽅式。
2.1 nextval:取得序列的下⼀个值 2.2 currval:取得当前序列的内容注意:currval 需要再nextval调⽤之后才能使⽤3.)序列的使⽤ insert into person values(person_pid_seq.nextval,'name,'adress');//⼀般是利⽤nextval,让id保持⼀直递增。
oracle 序列用法
oracle 序列用法在Oracle数据库中,序列是一种常用的数据结构,用于生成唯一的数字序列。
序列可以作为数据库表的主键、外键或其他需要唯一标识的字段的候选键。
本篇文章将介绍序列的创建、使用和注意事项。
一、创建序列要创建序列,可以使用以下语句:```sqlCREATESEQUENCEsequence_nameSTARTWITHstart_valueINCREMENTB Yincrement_valueNOCACHE;```其中,`sequence_name`是序列的名称,`start_value`是序列的起始值,`increment_value`是每次递增的数值,`NOCACHE`表示序列值不缓存,每次需要时重新生成。
例如,创建一个名为`my_sequence`的序列,起始值为1,每次递增1,不缓存:```sqlCREATESEQUENCEmy_sequenceSTARTWITH1INCREMENTBY1NOCACHE;```二、使用序列序列可以用于生成唯一的数字序列,通常用于作为数据库表的主键或外键。
可以使用以下语句从序列中获取下一个值:```sqlSELECTsequence_name.NEXTVALFROMdual;```例如,从`my_sequence`序列中获取下一个值:```sqlSELECTmy_sequence.NEXTVALFROMdual;```每次执行上述语句,数据库会自动从序列中生成一个唯一的数字序列,并将其返回。
三、注意事项1.序列的值是唯一的,每次获取都会生成一个新的值。
如果需要重复使用序列值,需要在数据库中进行适当的处理。
2.序列的值在生成后无法修改或删除。
如果需要使用已生成的序列值,需要在数据库中进行特殊处理。
3.序列的值在数据库中是物理存储的,因此需要确保序列值的存储空间足够大,以避免存储空间不足的问题。
4.在使用序列时,需要注意与其他数据类型和函数的关系,以确保数据的一致性和正确性。
数据库建序列
数据库建序列
数据库建序列是一项常用的数据库操作,它可以为表中的某个字段生成一个唯一的自增数值。
在实际的数据库应用中,序列通常被用于自动编号、身份证号、订单号等各种需要唯一标识的数据上。
在Oracle数据库中,可以通过如下SQL语句创建一个基本的序列:
CREATE SEQUENCE seq_name
INCREMENT BY 1
START WITH 1
MAXVALUE 999999999
MINVALUE 1
CACHE 20;
其中,seq_name是序列的名称,INCREMENT BY 1表示每次自增1,START WITH 1表示从1开始自增,MAXVALUE和MINVALUE分别表示序列的最大值和最小值,CACHE表示序列的缓存大小,可以提高序列的性能。
创建好序列后,可以通过如下SQL语句获取序列的下一个值:
SELECT seq_name.NEXTVAL FROM DUAL;
这条语句会返回一个唯一的自增数值,可以将其插入到表中的字段中,实现自动编号等功能。
除了Oracle数据库外,其他数据库也都支持序列的创建和使用,具体语法和参数可能会有所不同,需要根据具体的数据库类型进行调
整。
Oracle创建表和创建序列和修改,增加sql字段
Oracle创建表和创建序列和修改,增加sql字段⼀。
创建表 create table y_parts_classify( pt_id number(10) not null, pt_name varchar2(1000), update_time date default sysdate, create_time date default sysdate )⼆。
修改,和增加,删除sql字段 alter table y_parts_classify modify( pt_name varchar2(800) ) alter table y_parts_classify add( remark varchar2(1000) ) 删除字段的语法:alter table tablename drop (column); 说明:alter table 表名 drop column 字段名; 例:alter table sf_users drop column HeadPIC;三。
Oracle给字段增加说明。
备注 语法:comment on column TableName.ColumnName is '备注' 例⼦:comment on column y_parts_classify.pt_id is '配件分类id'四。
Oracle创建序列 create sequence seq_parts_classify minvalue 1 nomaxvalue start with 1 increment by 1 nocycle nocache五,从虚拟表查询 select seq_parts_classify.nextval from dual六.字段和表的重命名字段的重命名:说明:alter table 表名 rename column 列名 to 新列名(其中:column是关键字)例:alter table sf_InvoiceApply rename column PIC to NEWPIC;表的重命名:说明:alter table 表名 rename to 新表名例:alter table sf_InvoiceApply rename to sf_New_InvoiceApply;。
oracle序列的用法
oracle序列的用法Oracle序列是一种数据库对象,它用于产生唯一的、连续的数值序列。
它可以用于创建唯一的主键、创建唯一的值用于标识每一行数据、生成一组连续的数值等。
在本文中,将详细介绍Oracle序列的用法。
1.创建序列要创建一个序列,可以使用CREATESEQUENCE语句。
该语句的基本语法如下:CREATE SEQUENCE sequence_name[INCREMENTBYn][STARTWITHn][MAXVALUEn,NOMAXVALUE][MINVALUEn,NOMINVALUE][CYCLE,NOCYCLE][CACHEn,NOCACHE];其中,sequence_name是序列的名称。
INCREMENT BY指定每次递增的值,默认为1、START WITH指定序列的起始值,默认为1、MAXVALUE和MINVALUE分别指定序列的最大值和最小值。
CYCLE表示在达到最大值后是否循环到最小值重新开始,默认为NOCYCLE。
CACHE指定在内存中预分配的序列范围。
2.使用序列可以在INSERT语句中使用序列来生成主键值。
示例如下:INSERT INTO table_name (id, col1, col2)VALUES (sequence_name.NEXTVAL, 'value1', 'value2');其中,sequence_name.NEXTVAL表示获取序列的下一个值。
3.获取当前序列的值可以使用CURRVAL关键字来获取当前序列的值。
示例如下:SELECT sequence_name.CURRVAL FROM DUAL;需要注意的是,CURRVAL只能在使用NEXTVAL之后才能使用。
4.修改序列的属性可以使用ALTERSEQUENCE语句来修改序列的属性。
示例如下:ALTER SEQUENCE sequence_name[INCREMENTBYn][STARTWITHn][MAXVALUEn,NOMAXVALUE][MINVALUEn,NOMINVALUE][CYCLE,NOCYCLE][CACHEn,NOCACHE];可以根据需要修改INCREMENTBY、STARTWITH、MAXVALUE、MINVALUE、CYCLE和CACHE等属性。
Oracle数据库之序列(sequence)
Oracle数据库之序列(sequence)Oracle数据库之序列(sequence)序列是⼀个计数器,它并不会与特定的表关联。
我们可以通过创建Oracle序列和触发器实现表的主键⾃增。
序列的⽤途⼀般⽤来填充主键和计数。
⼀、创建序列语法结构:CREATE SEQUENCE [ schema. ] sequence_name[ { INCREMENT BY | START WITH } integer| { MAXVALUE integer | NOMAXVALUE }| { MINVALUE integer | NOMINVALUE }| { CYCLE | NOCYCLE }| { CACHE integer | NOCACHE }| ...]...;说明:1. schema:模式,即⽤户名称2. sequence_name:序列名称3. INCREMENT BY:定义序列的步长,如果省略,则默认为1,如果出现负值,则代表Oracle序列的值是按照此步长递减的。
4. START WITH:定义序列的初始值,默认为1。
5. MAXVALUE:序列⽣成器能产⽣的最⼤值。
NOMAXVALUE是默认选项,代表没有最⼤值定义。
6. MINVALUE:序列⽣成器能产⽣的最⼩值。
NOMINVALUE是默认选项,代表没有最⼩值定义。
7. CYCLE和NOCYCLE:当序列⽣成器的值达到限制值后是否循环。
CYCLE代表循环,NOCYCLE代表不循环。
如果循环,则当递增序列达到最⼤值时,循环到最⼩值,最⼩值为1。
对于递减序列达到最⼩值时,循环到最⼤值。
如果不循环,达到限制值后,继续产⽣新值就会发⽣错误。
8. CACHE:定义存放序列的内存块的⼤⼩,默认为20,相当于预加载。
缓冲部分序列计数以便更快获取序列值,可以改善序列的性能,但缓存选项可能会造成数据丢失。
NOCACHE表⽰不缓冲。
⽰例:CREATE SEQUENCE customers_seqSTART WITH 1000INCREMENT BY 1NOCACHENOCYCLE;⼆、删除序列语法:DROP SEQUENCE [ schema. ] sequence_name ;⽰例:DROP SEQUENCE customers_seq;三、使⽤序列序列有两个属性能够获取序列的值:CURRVAL:返回序列的当前值。
ORACLE创建序列和触发器
ORACLE中创建序列和触发器的方法
——弥补程序创建序列和触发器失败的方法
一、安装ORACLE9I的客户端工具
二、打开企业管理器,使用JCMS/JCMS连接数据库
三、拉开JCMS方案中的表的列表
自定义栏目的表名称以JCMS_网站ID_栏目ID 命名,如:JCMS_1_1404目前只建立了一个网站,所以网站ID均为1
可以对诸如JCMS_1_开头的表建立序列和触发器
四、检查该表是否已经创建对应的序列,如果没有,则创建序列
拉开JCMS方案中的序列列表,看是否存在该表名称对应的序列,如:JCMS_1_1404_SEQ
如果没有对应的序列,就创建如下:
选中JCMS_INFO_SEQ,右键,选择类似创建
填写序列名称:表名称_SEQ创建即可,如:JCMS_1_1404_SEQ
五、看是否创建触发器
拉开JCMS方案中的[源类型]下面的[触发器]列表,看是否有对应当前表的触发器,名称为表名称_SETID,如:JCMS_1_1404_SETID
如果有则无需创建,否则创建如下:
选中JCMS_INFO_SEQ,右键,选择类似创建
填写触发器名称表名_SETID,如:JCMS_1_1404_SETID,修改代码中使用的序列名称,表名_SEQ,如:JCMS_1_1404_SEQ
切换到[事件]标签,方案中选择当前的触发器作用的表,如JCMS方案下的表JCMS_1_1404
[创建]就可以了。
六、触发器创建成功,可以在触发器列表中找到,并且显示为有效(valid)状态.
(注:可编辑下载,若有不当之处,请指正,谢谢!)。
oracle?序列的创建与使用
oracle 序列的创建与使用展开全文在Oracle中,可以使用序列自动生成一个整数序列,主要用来自动为表中的数据类型的主键列提供有序的唯一值,这样就可以避免在向表中添加数据时,手工指定主键值。
而且使用手工指定主键值这种方式时,由于主键值不允许重复,因此它要求操作人员在指定主键值时自己判断新添加的值是否已经存在,这很显然是不可取的。
(1)创建序列序列与视图一样,并不占用实际的存储空间,只是在数据字典中保存它的定义信息。
创建序列需要使用CREATE SEQUENCE语句,其语法如下:CREATE SEQUENCE [schema]。
sequence_name[ START WITH start_number ][ INCREMENT BY increment_number ][ MINVALUE minvalue | NOMINVALUE ][ MAXVALUE maxvalue | NOMAXVALUE ][ CACHE cache_number | NOCACHE ][ CYCLE | NOCYCLE ][ ORDER | NOORDER ];注意:cache参数指定内存预分配的序列数的个数,默认20个,为了加快访问速度。
order参数指定是否按照请求次序生成序列号,一般使用序列生成主键值时,影响不大。
(2)序列中的两个伪列Currval:用于获取序列的当前值,必须再使用nextval一次之后才能使用。
nextval:用于获取序列的下一个值,第一次使用返回的是初始值,向表中的主键赋值的时候使用此伪列。
(3)序列举例•首先创建student表:create table student(sid number(4) primary key,sname varchar2(8) not null);•创建student_seq序列create sequence student_seqstart with 1increment by 1nocache nocycle order;•创建触发器(使用student_seq序列)create trigger tr_studentbefore insert on studentfor each rowbeginselect student_seq into :new.sid from dual; end;•插入数据:SQL> insert into student(sname) values('zhang')已创建 1 行。
ORACLE实现自定义序列号生成的方法
ORACLE实现⾃定义序列号⽣成的⽅法实际⼯作中,难免会遇到序列号⽣成问题,下⾯就是⼀个简单的序列号⽣成函数(1)创建⾃定义序列号配置表如下:--⾃定义序列create table S_AUTOCODE(pk1 VARCHAR2(32) primary key,atype VARCHAR2(20) not null,owner VARCHAR2(10) not null,initcycle CHAR(1) not null,cur_sernum VARCHAR2(50) not null,zero_flg VARCHAR(2) not null,sequencestyle VARCHAR2(50),memo VARCHAR2(60));-- Add comments to the columnscomment on column S_AUTOCODE.pk1 is '主键';comment on column S_AUTOCODE.atype is '序列号类型';comment on column S_AUTOCODE.owner is '序列号所有者';comment on column S_AUTOCODE.initcycle is '序列号递增';comment on column S_AUTOCODE.cur_sernum is '序列号';comment on column S_AUTOCODE.zero_flg is '序列号长度';comment on column S_AUTOCODE.sequencestyle is '序列号样式';comment on column S_AUTOCODE.memo is '备注';-- Create/Recreate indexescreate index PK_S_AUTOCODE on S_AUTOCODE (ATYPE, OWNER);(2)初始化配置表,例如:复制代码代码如下:insert into s_autocode (PK1, ATYPE, OWNER, INITCYCLE, CUR_SERNUM, ZERO_FLG, SEQUENCESTYLE, MEMO) values ('0A772AEDFBED4FEEA46442003CE1C6A6', 'ZDBCONTCN', '012805', '1', '200000', '7', '$YEAR$年$ORGAPP$质字第$SER$号', '质押合同中⽂编号');(3)⾃定义序列号⽣成函数:创建函数:SF_SYS_GEN_AUTOCODECREATE OR REPLACE FUNCTION SF_SYS_GEN_AUTOCODE(I_ATYPE IN VARCHAR2, /*序列类别*/I_OWNER IN VARCHAR2 /*序列所有者*/) RETURN VARCHAR2 IS/**************************************************************************************************//* PROCEDURE NAME : SF_SYS_GEN_AUTOCODE *//* DEVELOPED BY : WANGXF *//* DESCRIPTION : 主要⽤来⽣成⾃定义的序列号 *//* DEVELOPED DATE : 2016-10-08 *//* CHECKED BY : *//* LOAD METHOD : F1-DELETE INSERT *//**************************************************************************************************/O_AUTOCODE VARCHAR2(100); /*输出的序列号*/V_INITCYCLE S_AUTOCODE.INITCYCLE%TYPE; /*序列号递增*/V_CUR_SERNUM S_AUTOCODE.CUR_SERNUM%TYPE; /*序列号*/V_ZERO_FLAG S_AUTOCODE.ZERO_FLG%TYPE; /*序列号长度*/V_SEQUENCESTYLE S_AUTOCODE.SEQUENCESTYLE%TYPE;/*序列号样式*/V_SEQ_NUM VARCHAR2(100); /*本次序列号*/V_DATE_YEAR CHAR(4); /*年份,如2016*/V_DATE_YEAR_MONTH CHAR(6); /*年份⽉份,如201610*/V_DATE_DATE CHAR(8); /*年份⽉份⽇,如20161008*/V_DATE_DATE_ALL CHAR(14); /*完整年份序列,如20161008155732*//*⽀持的参数序列:$YEAR$ --> 年份$YEAR_MONTH$ --> 年份+⽉份,不含汉⼦$DATE$ --> 年份+⽉份+⽇期,不含汉⼦$DATE_ALL$ --> 完整⽇期,不含汉⼦$ORGAPP$ --> 所有者$SER$ --> 当前序列号*/--解决查询事务⽆法执⾏DML的问题Pragma Autonomous_Transaction;BEGIN-- 查询复核条件的序列号配置SELECT T.INITCYCLE,T.CUR_SERNUM,T.ZERO_FLG,T.SEQUENCESTYLEINTO V_INITCYCLE,V_CUR_SERNUM,V_ZERO_FLAG,V_SEQUENCESTYLEFROM S_AUTOCODE T WHERE T.ATYPE=I_ATYPE AND T.OWNER=I_OWNER ;--格式化当前⽇期SELECTTO_CHAR(SYSDATE,'yyyy'),TO_CHAR(SYSDATE,'yyyyMM'),TO_CHAR(SYSDATE,'yyyyMMdd'),TO_CHAR(SYSDATE,'yyyyMMddHH24MISS')INTO V_DATE_YEAR,V_DATE_YEAR_MONTH,V_DATE_DATE,V_DATE_DATE_ALLFROM DUAL;-- ⽇期处理O_AUTOCODE := REPLACE(V_SEQUENCESTYLE,'$YEAR$',V_DATE_YEAR);O_AUTOCODE := REPLACE(O_AUTOCODE,'$YEAR_MONTH$',V_DATE_YEAR_MONTH);O_AUTOCODE := REPLACE(O_AUTOCODE,'$DATE$',V_DATE_DATE);O_AUTOCODE := REPLACE(O_AUTOCODE,'$DATE_ALL$',V_DATE_DATE_ALL);--所有者处理O_AUTOCODE := REPLACE(O_AUTOCODE,'$ORGAPP$',I_OWNER);--序号处理V_SEQ_NUM := TO_CHAR(TO_NUMBER(V_CUR_SERNUM)+TO_NUMBER(V_INITCYCLE));--反写当前序列号,确保每次都是递增UPDATE S_AUTOCODE T SET T.CUR_SERNUM=V_SEQ_NUM WHERE T.ATYPE=I_ATYPE AND T.OWNER=I_OWNER ; --不满⾜长度的前⾯补0IF LENGTH(V_SEQ_NUM) < TO_NUMBER(V_ZERO_FLAG)THEN /*LOOPV_SEQ_NUM := '0'||V_SEQ_NUM;EXIT WHEN LENGTH(V_SEQ_NUM) = TO_NUMBER(V_ZERO_FLAG);END LOOP; */ V_SEQ_NUM := LPAD(V_SEQ_NUM,TO_NUMBER(V_ZERO_FLAG),'0');END IF;O_AUTOCODE := REPLACE(O_AUTOCODE,'$SER$',V_SEQ_NUM);COMMIT;RETURN O_AUTOCODE;EXCEPTION--如果没有对应的配置项,则返回ERROR值WHEN NO_DATA_FOUND THENROLLBACK;DBMS_OUTPUT.put_line('there is no config as you need...');RETURN 'ERROR';END SF_SYS_GEN_AUTOCODE;(4)测试:配置项:$YEAR$年$ORGAPP$质字第$SER$号复制代码代码如下:SELECT SF_SYS_GEN_AUTOCODE('ZDBCONTCN','012805') FROM DUAL;(5)结果2016年012805质字第0200001号以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
序列的创建
create sequence seq_newsId
increment by 1
start with 1
maxvalue 999999999;
得到序列的SQL语句
select seq_newsid.nextval from sys.dual;
INCREMENT BY: 指定序列号之间的间隔,该值可为正的或负的整数,但不可为0。序列为升序。忽略该子句时,缺省值为1。
START WITH:指定生成的第一个序列号。在升序时,序列可从比最小值大的值开始,缺省值为序列的最小值。对于降序,序列可由比最大值小的值开始,缺省值为序列的最大值。
MAXVALUE:指定序列可生成的最大值。
NOMAXVALUE:为升序指定最大值为1027,为降序指定最大值为-1。
MINVALUE:指定序列的最小值。
NOMINVALUE:为升序指定最小值为1。为降序指定最小值为-1026。
2) 更改序列命令
ALTERSEQUENCE [user.]sequence_name
MINVALUE 1
CYCLE
CACHE 20
NOORDER;
删除序列的SQL
DROP SEQUENCE seq_newsId;
======================
oracle开发中序列的使用
序列是一数据库对象,利用它可生成唯一的整数。一般使用序列自动地生成主码值。一个序列的值是由特别的Oracle程序自动生成,因而序列避免了在运用层实现序列而引起的性能瓶颈。Oracle序列允许同时生成多个序列号,而每一个序列号是唯一的。 当一个序列号生成时,序列是递增,独立于事务的提交或回滚。容许设计缺省序列,不需指定任何子句。该序列为上升序列,由1开始,增量为1,没有上限。
[INCREMENT BY n]
[MAXVALUE n| NOMAXVALUE ]
[MINVALUE n | NOMINVALUE];
修改序列可以:
? 修改未来序列值的增量。
? 设置或撤消最小值或最大值。
? 转变缓冲序列的数目。
? 指定序列号是否是有序。
3) 删除序列命令
DROP SEQUENCE [user.]sequence_name;
从数据库中删除一序列பைடு நூலகம்
树立一个序列号的语句:
CREATE SEQUENCE EXAM_NO_SEQ
START WITH 1484
MAXVALUE 9999999999
1) 建立序列命令
CREATE SEQUENCE [user.]sequence_name
[increment by n]
[start with n]
[maxvalue n | nomaxvalue]
[minvalue n | nominvalue];