Oracle创建序列的方法及技巧
- 格式:doc
- 大小:43.00 KB
- 文档页数:6
一、什么是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函数,避免因为序列的不正确使用而导致数据的混乱或错误。
oracle中序列的使⽤序列: 是oacle提供的⽤于产⽣⼀系列唯⼀数字的数据库对象。
l ⾃动提供唯⼀的数值l 共享对象l 主要⽤于提供主键值l 将序列值装⼊内存可以提⾼访问效率创建序列:1、要有创建序列的权限 create sequence 或 create any sequence2、创建序列的语法CREATE SEQUENCE sequence //创建序列名称[INCREMENT BY n] //递增的序列值是n 如果n是正数就递增,如果是负数就递减默认是1 [START WITH n] //开始的值,递增默认是minvalue 递减是maxvalue[{MAXVALUE n | NOMAXVALUE}] //最⼤值[{MINVALUE n | NOMINVALUE}] //最⼩值[{CYCLE | NOCYCLE}] //循环/不循环[{CACHE n | NOCACHE}];//分配并存⼊到内存中NEXTVAL 返回序列中下⼀个有效的值,任何⽤户都可以引⽤CURRVAL 中存放序列的当前值NEXTVAL 应在 CURRVAL 之前指定,⼆者应同时有效Create sequence seqEmp increment by 1 start with 1 maxvalue 3 minvalue 1Cycle cache 2;//先nextval 后 currvalSelect seqEmp.nextval from dual;Select seqEmp.currval from dual;Cache<max-min/increment//解释{Create 创建Sequence 序列 seqEmop 序列名称Increment by 步长Stat with 1 开始值Maxvalue 最⼤值Minvalue 最⼩值Cycle 循环 nocycle 不循环Cache 缓存 Cache<maxvalue-minvalue/increment by//⼀般不采⽤缓存Nextvalue 下⼀个Currval 当前值}//实例应⽤//实现id的⾃动递增//第⼀步create table cdpt(id number(6),name varchar2(30),constraint pk_id primary key(id));Create sequence seq_cdptIncrement by 1Start with 1Maxvalue 999999Minvalue 1Nocyclenocacheinsert into cdpt values(seq_cdpt.nextval,’feffefe’);commit;select * from cdpt;/使⽤序列会产⽣裂缝l 序列在下列情况下出现裂缝:• 回滚• 系统异常>多个表同时使⽤同⼀序列//修改序列的增量, 最⼤值, 最⼩值, 循环选项, 或是否装⼊内存alter SEQUENCE sequence //创建序列名称[INCREMENT BY n] //递增的序列值是n 如果n是正数就递增,如果是负数就递减默认是1 [START WITH n] //开始的值,递增默认是minvalue 递减是maxvalue[{MAXVALUE n | NOMAXVALUE}] //最⼤值[{MINVALUE n | NOMINVALUE}] //最⼩值[{CYCLE | NOCYCLE}] //循环/不循环[{CACHE n | NOCACHE}];//分配并存⼊到内存中修改序列的注意事项:l 必须是序列的拥有者或对序列有 ALTER 权限l 只有将来的序列值会被改变l 改变序列的初始值只能通过删除序列之后重建序列的⽅法实现删除序列l 使⽤DROP SEQUENCE 语句删除序列l 删除之后,序列不能再次被引⽤Alter sequence seqEmp maxvalue 5;Select seqEmp.nextval from dual;。
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数据库中创建序列并⽤序列⾃动⽣成ID或编号⼯作中经常需要⽣成指定格式的ID,例如:学⽣ID--S2*******,基⾦代码--F20023等。
这种字符+数字格式的ID类⼿动数据有点⿇烦。
今天我跟⼤家分享⽤创建序列后,再通过触发器⾃动⽣成上述混合格式的ID的⽅法。
当然这是我经常⽤的⼀种⽅法,如果⼤家有其他⽅法或者对于我下⾯分享的内容有更好的意见建议,在评论区留⾔讨论。
⾸先我创建了学⽣信息表sut_info,如下:stu_infostu_id stu_name stu_age stu_sexS2020001 Rose 18famale表中stu_id是S+7位数字组成,在后⾯创建序列的时候注意这⼀点。
第⼀步,创建数据表,代码如下:create table stu_info(stu_id varchar2(16) not null primary key,stu_name varchar2(32),stu_age number(8),stu_sex varchar2(8));第⼆步,创建序列号seq_stu_id,代码如下:/*为stu_id创建序列*/create sequence seq_stu_idstart with2020000nocache;查看序列值的⽅法序列名.nextval(查看下⼀个值)或者序列名.currval(查看当前值)。
这⾥要注意的是查看序列的初始值要先⽤nextval,如果对于初始值⽤currval会报错。
⽐如:查看上⾯创建序列的初始值的代码如下:/*验证序列*/select seq_stu_id.nextval from dual;查询结果为:NEXTVAL2020000第三步,创建触发器,实现对stu_info 表添加数据的时候⽤序列值⾃动⽣成学⽣id,代码如下:/*创建触发器实现对stu_info表添加数据的时候,通过序列号⾃动⽣成stu_id,形式为:S+7位数字*/create or replace trigger int_stu_idbefore inserton stu_infofor each rowbeginselect'S'||seq_stu_id.nextval into:new.stu_id from dual;end int_stu_id;下⾯对stu_info 表插⼊数据看看。
oracle数据库创建实例Oracle数据库是目前世界上使用最广泛的商业数据库之一,它的稳定性和数据处理能力备受业界推崇。
在使用Oracle数据库时,首先需要创建一个实例,本文将介绍Oracle数据库创建实例的步骤和注意事项。
1. 配置环境变量在创建Oracle实例之前,需要先配置好相关的环境变量,确保Oracle数据库可以正常运行。
首先需要设置ORACLE_BASE,这是Oracle的基础路径,一般情况下设为/opt/oracle。
其次需要设置ORACLE_HOME,这是Oracle的安装路径,一般情况下设为/opt/oracle/product/11.2.0/dbhome_1。
最后需要设置PATH和LD_LIBRARY_PATH,将Oracle相关的二进制文件路径和库文件路径加入到系统环境变量中。
2. 创建实例创建Oracle实例需要使用dbca命令行工具,该工具可以通过Oracle安装程序自动安装。
在使用dbca之前,需要确保Oracle 数据库服务已经启动。
执行以下命令启动Oracle服务:$ su - oracle$ sqlplus / as sysdbaSQL> startup在Oracle服务启动后,使用dbca创建实例。
执行以下命令:$ dbca在dbca的图形界面中,选择创建数据库。
在创建数据库的过程中,需要指定实例名称、数据库名称、数据库字符集、数据库管理员密码等信息。
需要注意的是,实例名称和数据库名称可以不同,但是实例名称必须唯一。
3. 配置监听器在创建Oracle实例后,需要配置监听器。
监听器是Oracle数据库服务的入口,它负责监听客户端的连接请求,并将请求转发给相应的实例。
在Oracle中,监听器可以使用lsnrctl命令进行管理。
执行以下命令启动监听器:$ lsnrctl start在监听器启动后,需要将实例注册到监听器中。
执行以下命令:$ lsnrctl status$ sqlplus / as sysdbaSQL> alter system register;4. 连接实例在实例和监听器配置完成后,可以使用sqlplus命令连接Oracle实例。
ORACLEPLSQL中序列(sequence)的简易使⽤⽅法介绍原⽂sequence在ORACLE中应⽤⼗分⼴泛,就是序列号的意思,会⾃动增加指定变数,如逐次增加1或者2或者其他.1.创建序列 Create Sequence你⾸先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE 权限CREATE SEQUENCE CUX_DEMO_SEQUENCEMINVALUE 1MAXVALUE 99999999999START WITH 10000INCREMENT BY 1NOCYCLECACHE 20ORDER ;注释:MINVALUE 1 --最⼩值MAXVALUE 99999999999 --最⼤值START WITH 10000 --起始数值INCREMENT BY 1 --每次增加1NOCYCLE --⼀直累加不循环CACHE 20 --缓存ORDER ;还有⼀些其他参数,⽐如:NOMAXVALUE --⽆最⼤值NOCACHE --不设置缓存如果指定CACHE值,ORACLE就可以预先在内存⾥⾯放置⼀些sequence,这样存取的快些。
cache⾥⾯的取完后,oracle⾃动再取⼀组到cache。
使⽤cache或许会跳号,⽐如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候⽤nocache防⽌这种情况。
2.使⽤序列定义好SEQUENCE,你就可以⽤CURRVAL,NEXTVALCURRVAL=返回 SEQUENCE的当前值NEXTVAL=增加SEQUENCE的值,然后返回 SEQUENCE 值EXAMPLE:CUX_DEMO_SEQUENCE.CURRVALCUX_DEMO_SEQUENCE.NEXTVAL可以使⽤SEQUENCE的地⽅:- 不包含⼦查询、snapshot、VIEW的 SELECT 语句- INSERT语句的⼦查询中- NSERT语句的VALUES中- UPDATE 的 SET中可以看如下例⼦:INSERT INTO CUX_DEMO_TABLE VALUES(CUX_DEMO_SEQUENCE.NEXTVAL, 123 , 'IBAD' , 'MARK' ,'Y');SELECT CUX_DEMO_SEQUENCE.CURRVAL FROM DUAL;注意:第⼀次NEXTVAL返回的是初始值;随后的NEXTVAL会⾃动增加你定义的INCREMENTBY值,然后返回增加后的值。
oracle 循环造数技巧Oracle是一种功能强大的关系型数据库管理系统,它支持使用循环来生成和处理数据。
在本文中,我们将探讨一些Oracle中循环造数的技巧,以帮助您更好地利用这个强大的功能。
在Oracle中,使用循环生成数据的常见方法是使用PL/SQL中的循环结构。
PL/SQL是Oracle提供的一种过程化编程语言,可以与数据库进行交互。
下面我们将介绍一些常用的技巧。
1. 使用FOR循环生成连续数字序列在Oracle中,可以使用FOR循环生成连续的数字序列。
例如,要生成从1到10的数字序列,可以使用以下代码:```sqlBEGINFOR i IN 1..10 LOOPDBMS_OUTPUT.PUT_LINE(i);END LOOP;END;```上述代码中,FOR循环从1到10循环遍历,每次迭代都会将当前的数字打印出来。
2. 使用WHILE循环生成满足条件的数据除了使用FOR循环生成连续的数字序列外,还可以使用WHILE循环生成满足条件的数据。
例如,要生成小于100的偶数序列,可以使用以下代码:```sqlDECLAREi NUMBER := 0;BEGINWHILE i < 100 LOOPi := i + 2;DBMS_OUTPUT.PUT_LINE(i);END LOOP;END;```上述代码中,WHILE循环在i小于100的条件下循环遍历,每次迭代都会将当前的偶数打印出来。
3. 使用循环生成日期序列在Oracle中,可以使用循环生成日期序列。
例如,要生成从2022年1月1日到2022年12月31日的日期序列,可以使用以下代码:```sqlDECLAREstart_date DATE := TO_DATE('2022-01-01', 'YYYY-MM-DD');end_date DATE := TO_DATE('2022-12-31', 'YYYY-MM-DD');current_date DATE := start_date;BEGINWHILE current_date <= end_date LOOPDBMS_OUTPUT.PUT_LINE(current_date);current_date := current_date + 1;END LOOP;END;```上述代码中,使用WHILE循环遍历从开始日期到结束日期的每一天,并将其打印出来。
在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数据库中,sequence等同于序列号,每次取的时候sequence 会自动增加,一般会作用于需要按序列号排序的地方。
1、Create Sequence(注释:你需要有CREATE SEQUENCE或CREATE ANY SEQUENCE权限) CREATE SEQUENCE emp_sequenceINCREMENT BY 1 ——每次加几个START WITH 1 ——从1开始计数MAXV ALUE ——最大值值NOMAXV ALUE ——不设置最大值NOCYCLE ——一直累加,不循环CYCLECACHE 10;只要定义了emp_sequence,你就可以用使CURRV AL,NEXTV AL CURRV AL=返回sequence的当前值NEXTV AL=增加sequence的值,然后返回sequence 值例如:emp_sequence.CURRV ALemp_sequence.NEXTV ALinsert into dept (deptno, dname, loc) values (emp_sequence.nextval, '物流部', '苏州');//查询序列的当前值select emp_sequence.currval from dual;可以使用sequence的地方:。
不包含子查询、snapshot、VIEW的SELECT 语句。
INSERT语句的子查询中。
NSERT语句的V ALUES中。
UPDATE 的SET中可以看如下例子:INSERT INTO emp V ALUES(empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20); SELECT empseq.CURRV AL FROM DUAL;需要注意的是:第一次NEXTV AL返回的是初始值;随后的NEXTV AL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。
oracle 创建方法Oracle是目前市场上最强大的数据库管理系统之一,其提供了多种创建方法来方便数据库管理员和开发人员创建和管理数据库对象。
本文将介绍Oracle数据库中要点的创建方法,包括创建表、索引、视图、存储过程和触发器等。
1. 创建表创建表是Oracle中最基础和重要的操作之一,下面是创建表的语法:CREATE TABLE table_name ( column1 datatype[ NULL | NOT NULL ], column2 datatype [ NULL | NOT NULL ], ... );其中table_name是所需创建的表的名称,datatype是数据类型,column1、column2等代表表中的每个列名。
在方括号内 [ ] 的是可选项,NULL标识该列允许为空,而NOT NULL标识该列必须填写数据值。
2. 创建索引索引是Oracle中重要的数据结构,在查询中可以大幅提升查询效率。
下面是Oracle创建索引的语法:CREATE INDEX index_name ON table_name (column1, column2, ...);其中index_name是所创建的索引名称,table_name 是索引建立的表名称,(column1, column2, ...)指所索引的列名称,多个列之间用逗号分隔。
3. 创建视图视图是数据库中一种虚拟表格,不是实际存在于数据库中的表,其目的是为了简化数据查询操作,特别是在复杂的查询时。
下面是Oracle创建视图的语法:CREATE VIEW view_name AS SELECT column1, column2, ... FROM table_name WHERE condition;其中view_name是创建的视图名称,SELECT语句是视图显示的列和所需的表名,WHERE语句是视图条件过滤设置。
4. 创建存储过程存储过程是一段提前定义好的SQL语句集合,可重复执行。
Oracle创建序列的方法及技巧日期:2008-06-23] 来源:互联网整理前面说过,关系数据库的一个最重要的方面是,每个表必须有一个主键。
许多情况下,在数据库中创建一个作为标识符的新键列是最容易的。
例如,Agent s表有一个作为主键的AgentID列。
但是,总是存在一个问题:从何处取得保证唯一的新编号?在一个较大的组织机构中,可能有一个人力资源部,可以建立某种处理,以便新雇员总能分配一个唯一的编号,并且在雇用某人时该数据被录入到表中。
但必须有人密切关注所分配的所有编号,并且还需要检验它们唯一性的一个表单。
相对于依赖基于人工的处理,让数据库生成用作键值的编号更有意义。
orac le为此目的使用序列。
序列(sequence)是Oracle在需要时用来产生新值的一个编号集合。
序列的两个关键点是:必须预先建立;需要代码请求生成新值。
序列的编号不是在录入新行时自动生成的。
你必须编写代码来生成值,并把它们存储在合适的列中。
注意,可以对要自动生成编号的表的Insert事件编写一个数据库触发器。
但是,Oracle中最常见的方法是在需要时生成关键值,通常是在表单上生成。
一般,在定义原始表时定义一个序列。
但是,因为序列与表之间不存在直接的关系,所以可以在创建编号前建立序列。
序列只需创建一次,在整个SQL*Plu s中都可以使用。
(1) 因为表中已经存在数据,找出其最大值:SELECT Max(AgentID) FROM Agents;(2) 最大值应该为15521,你可能想从一个比它大的值开始。
用15522就可以了,但为保险起见,从20000开始:CREATE SEQUENCE seq_AgentsINCREMENT BY 1START WITH 20000;(3) 也是用SQL检索新值,它自动用序列定义中指定的值给计数器增量。
试一下,以保证理解相应的命令:SELECT seq_Agents.NEXTVAL FROM dual;此命令使用了人为的dual表,因为PL/SQL总是要求使用FROM子句。
它应该返回值20000。
如果重复此命令,它将返回20001、20002,如此等等。
注意,序列简单地返回数字,不对这些数字做任何事情。
由你决定使用这些数字作为新主键值。
实际上,你可以将这些数字用于任何用途,但应该将一个序列仅用于一个用途。
而且,还应该仔细地命名序列,以便别人能够理解其用途。
在创建序列之后,需要给表单添加代码,以便在添加一个新代理时自动生成一个新值。
启动Forms Builder并打开Agents表单。
应该打开第8章中创建的表单版本,复制第8章中建立的Agents.fmb和Agents.fmx文件,把它们放置到本章的文件夹中。
如果没有第8章中创建的版本,可使用本章创建的简单版本。
第1步照常是确定使用何种触发器事件。
初看起来,使用On-Insert触发器很吸引人,但该事件在处理过程中有点迟缓。
记住,在用户使用表单时,他们单击Insert Record选项创建一个空白页。
这个活动触发When-Create-Record事件。
On-Insert事件在用户单击Save按钮后才触发。
(1) 对表单的When-Create-Record事件创建一个新触发器。
(2) 使用主菜单上的File/Connect并登录数据库。
(3) 添加代码为Agents生成一个新序列编码:SELECT seq_Agents.NEXTVAL INTO :AGENTS.AGENTID FROM dual;(4) 单击Compile按钮,以保证没有输入错误或语法错误。
提示如果你接收到一条有关dual表的错误消息,很可能是因为没有连接到数据库。
(5) 启动表单以保证生成一个新ID。
图9-15示出打开时的Agents表单。
When-Create-Record事件在表单第1次打开时触发。
因此,每当用户运行此表单,都将生成一个新的ID值。
如果用户不打算输入新代理,单击Execute Query按钮将对已有代理装载表单。
所生成的ID值将被抛弃。
因为数据库可生成十亿以上的编号,丢掉几个不会产生问题。
但是,如果你有一个预期用户很少增加新条目的表单,可以改进此表单的效率。
添加Execute_Query语句到When-New-Form-Instance触发器。
此动作对用户隐藏初始的空白表单,但仍然会产生额外的序列值。
oracle数据库PL/SQL序列(组图)资料引用:/386105.html序列是Oracle 9i提供的用于按照设定的规则自动产生数据的方案对象。
在某些数据表的结构中,有些字段需要这种特性。
比如,对于某个学生数据表的学号要害字段,用户可以希望在录入数据时,能够自动在上一个记录的学号字段上自动加1等。
由于Oracle 9i提供的16种基本数据类型并没有这样的功能,可以通过序列方案对象来实现。
序列的创建下面介绍在【企业治理器】中如何创建序列。
(1)在【企业治理器】中选择【myoracle.mynet】/【方案】/【序列】选项,单击鼠标右键,在出现的快捷菜单里选择【创建】选项,如图9.48所示。
(2)出现如图9.49所示的创建序列的【一般信息】选项卡。
在【名称】文本框里输入待定义的序列的名称“TEMPSEQUENCE”。
在【方案】下拉列表框里选择序列所属的用户名“SCOTT”。
序列【类型】参数有两个选项。
若选择【升序】单选钮,则表示将创建从初始值向最大值递增的序列,这是创建序列时的默认设置;若选择【降序】单选钮,则表示将创建从初始值向最小值递减的序列。
对【值】可以进行设置的参数如下。
在【最小值】文本框里设置序列答应的最小值。
创建序列时该字段最初为空。
假如单击【创建】按钮时该字段为空,则对升序序列使用默认值1,而对降序序列使用默认值-1026。
在【最大值】文本框里设置序列答应的最大值。
创建序列时该字段最初为空。
假如单击【创建】按钮后该字段为空,则将对升序序列使用默认值1027,而对降序序列使用默认值-1。
在【时间间隔】文本框里设置递增序列递增的间隔数值(升序序列)或递减序列递减的间隔数值(降序序列)。
创建序列时该字段最初为空,假如单击【创建】按钮后该字段为空,将使用默认值1,该字段只能为正整数。
在【初始值】文本框里设置序列的起始值。
假如单击【创建】按钮后该字段为空,对升序序列将使用该序列默认的最小值,对降序序列将使用该序列默认的最大值。
对【选项】可以设置的参数如下。
若选择【循环值】复选框,则表示指定在达到序列最小值或最大值之后,序列应继续生成值。
对升序序列来说,在达到最大值后将生成最小值。
对降序序列来说,在达到最小值后将生成最大值。
假如未选择该复选框,序列将在达到最小值或最大值后停止生成任何值。
默认情况下是未选择状态。
若选择【排序值】复选框,则指定序列号要按请求次序生成,默认情况下是未选择状态。
在【高速缓存】中设置由数据库预分配并存储的值的数目参数。
若选择【默认值】单选钮,则表示将设置默认值为20,默认情况下选择此选项;若选择【无高速缓存】单选钮,则表示指定不预分配序列值;若选择【大小】单选钮,则表示在文本框里输入可接受的值,最小值为2,对循环序列来说,该值必须小于循环中值的个数。
假如序列能够生成的值数的上限小于高速缓存大小,则高速缓存大小将自动改换为该上限数。
完成设置后单击【创建】按钮。
(3)成功创建序列后,出现如图9.50所示界面。
单击“确定”按钮。
(3)读者也可以在【SQLPlus Worksheet】中执行下列SQL程序创建序列。
―――――――――――――――――――――――――――――――――――――CREATE SEQUENCE "SCOTT"."TEMPSEQUENCE"INCREMENT BY 1 START WITH 1MAXV ALUE 1.0E28 MINV ALUE 1NOCYCLE CACHE 20 NOORDER―――――――――――――――――――――――――――――――――――――【配套程序位置】:第9章\ createsequence.sql。
序列的使用下面介绍在向数据表中插入数据时如何使用序列。
(1)首先为实例建立一个数据表“SCOTT.SEQUENCE_TABLE”,为简化起见,该数据表仅包含一个类型为“NUMBER”的数据列“NO”。
在如图9.51所示的创建表的【一般信息】选项卡中进行如下设置。
在【名称】文本框中输入“SEQUENCE_TABLE”。
在【方案】下拉列表框中选择“SCOTT”。
在【表空间】下拉列表框中选择“USERS”。
在【名称】单元格中输入“NO”,在【数据类型】下拉列表框单元格中选择“NUMBER”。
完成设置后单击【创建】按钮。
(2)读者也可以在【SQLPlus Worksheet】中执行下列SQL代码创建数据表“SCOTT.SEQUENCE_TABLE”。
―――――――――――――――――――――――――――――――――――――CREATE TABLE "SCOTT"."SEQUENCE_TABLE" ("NO" NUMBER(10) NOT NULL) TABLESPACE "USERS"―――――――――――――――――――――――――――――――――――――【配套程序位置】:第9章\ createsequencetable.sql。
(3)在插入新的记录时,使用刚创建的“TEMPSEQUENCE”序列来自动产生“NO”数据列的值。
在【SQLPlus Worksheet】里执行下面的SQL代码,执行的结果如图9.52所示。
―――――――――――――――――――――――――――――――――――――INSERT INTO SCOTT.SEQUENCE_TABLE(NO)V ALUES(SCOTT.TEMPSEQUENCE.NEXTV AL);―――――――――――――――――――――――――――――――――――――【配套程序位置】:第9章\ insertsequencetable.sql。
“SCOTT.TEMPSEQUENCE.NEXTV AL”表分配下一个惟一的、可用的序列号。
执行“SCOTT.TEMPSEQUENCE.NEXTV AL”后,可以使用“SCOTT.TEMPSEQUENCE. CURRV AL”来标识上一个已经存储的序列值。
(4)在【SQLPlus Worksheet】中可以执行查询数据表“SCOTT.SEQUENCE_TABLE”数据的语句。
执行结果如图9.53所示,表明序列“SCOTT.SEQUENCE”产生的值已经成功录入数据表中。