Oracle创建序列的方法及技巧

上传人:ba****u6 文档编号:101847591 上传时间:2022-06-05 格式:DOCX 页数:5 大小:16.38KB
收藏 版权申诉 举报 下载
Oracle创建序列的方法及技巧_第1页
第1页 / 共5页
Oracle创建序列的方法及技巧_第2页
第2页 / 共5页
Oracle创建序列的方法及技巧_第3页
第3页 / 共5页
资源描述:

《Oracle创建序列的方法及技巧》由会员分享,可在线阅读,更多相关《Oracle创建序列的方法及技巧(5页珍藏版)》请在装配图网上搜索。

1、Oracle创建序列的方法及技巧日期:2008-06-23来源:互联网整理前面说过,关系数据库的一个最重要的方面是,每个表必须有一个主键。许多情况下,在数据库中创建一个作为标识符的新键列是最容易的。例如,Agents表有一个作为主键的AgentID列。但是,总是存在一个问题:从何处取得保证唯一的新编号?在一个较大的组织机构中,可能有一个人力资源部,可以建立某种处理,以便新雇员总能分配一个唯一的编号,并且在雇用某人时该数据被录入到表中。但必须有人密切关注所分配的所有编号,并且还需要检验它们唯一性的一个表单。相对于依赖基于人工的处理,让数据库生成用作键值的编号更有意义。oracle为此目的使用序列

2、。序列(sequenee)是Oracle在需要时用来产生新值的一个编号集合。序列的两个关键点是:必须预先建立;需要代码请求生成新值。序列的编号不是在录入新行时自动生成的。你必须编写代码来生成值,并把它们存储在合适的列中。注意,可以对要自动生成编号的表的Insert事件编写一个数据库触发器。但是,Oracle中最常见的方法是在需要时生成关键值,通常是在表单上生成。一般,在定义原始表时定义一个序列。但是,因为序列与表之间不存在直接的关系,所以可以在创建编号前建立序列。序列只需创建一次,在整个SQL*Plus中都可以使用。(1) 因为表中已经存在数据,找出其最大值:SELECTMax(AgentID

3、)FROMAgents;最大值应该为15521,你可能想从一个比它大的值开始。用15522就可以了,但为保险起见,从20000开始:CREATESEQUENCEseq_AgentsINCREMENTBY1STARTWITH20000;(2) 也是用SQL检索新值,它自动用序列定义中指定的值给计数器增量。试一下,以保证理解相应的命令:SELECTseq_Agents.NEXTVALFROMdual;此命令使用了人为的dual表,因为PL/SQL总是要求使用FROM子句。它应该返回值20000。如果重复此命令,它将返回20001、20002,如此等等。注意,序列简单地返回数字,不对这些数字做任何事

4、情。由你决定使用这些数字作为新主键值。实际上,你可以将这些数字用于任何用途,但应该将一个序列仅用于一个用途。而且,还应该仔细地命名序列,以便别人能够理解其用途。在创建序列之后,需要给表单添加代码,以便在添加一个新代理时自动生成一个新值。启动FormsBuilder并打开Agents表单。应该打开第8章中创建的表单版本,复制第8章中建立的Agents.fmb和Agents.fmx文件,把它们放置到本章的文件夹中。如果没有第8章中创建的版本,可使用本章创建的简单版本。第1步照常是确定使用何种触发器事件。初看起来,使用On-Insert触发器很吸引人,但该事件在处理过程中有点迟缓。记住,在用户使用表

5、单时,他们单击InsertRecord选项创建一个空白页。这个活动触发When-Create-Record事件。On-Insert事件在用户单击Save按钮后才触发。(1) 对表单的When-Create-Record事件创建一个新触发器。(2) 使用主菜单上的File/Connect并登录数据库。(3) 添加代码为Agents生成一个新序列编码:SELECTseq_Agents.NEXTVALINTO:AGENTS.AGENTIDFROMdual;(4) 单击Compile按钮,以保证没有输入错误或语法错误。提示如果你接收到一条有关dual表的错误消息,很可能是因为没有连接到数据库。(5)

6、启动表单以保证生成一个新ID。图9-15示出打开时的Agents表单。When-Create-Record事件在表单第1次打开时触发。因此,每当用户运行此表单,都将生成一个新的ID值。如果用户不打算输入新代理,单击ExecuteQuery按钮将对已有代理装载表单。所生成的ID值将被抛弃。因为数据库可生成十亿以上的编号,丢掉几个不会产生问题。但是,如果你有一个预期用户很少增加新条目的表单,可以改进此表单的效率。添加Execute_Query语句到When-New-Form-Instance触发器。此动作对用户隐藏初始的空白表单,但仍然会产生额外的序列值。oracle数据库PL/SQL序列(组图)

7、资料引用:序列的创建下面介绍在【企业治理器】中如何创建序列。(1)在【企业治理器】中选择【myoracle.mynet】/【方案】/【序列】选项,单击鼠标右键,在出现的快捷菜单里选择【创建】选项,如图9.48所示。(2)出现如图9.49所示的创建序列的【一般信息】选项卡。在【名称】文本框里输入待定义的序列的名称“TEMPSEQUENCE”。在【方案】下拉列表框里选择序列所属的用户名“SCOTT”。序列【类型】参数有两个选项。若选择【升序】单选钮,则表示将创建从初始值向最大值递增的序列,这是创建序列时的默认设置;若选择【降序】单选钮,则表示将创建从初始值向最小值递减的序列。对【值】可以进行设置的

8、参数如下。在【最小值】文本框里设置序列答应的最小值。创建序列时该字段最初为空。假如单击【创建】按钮时该字段为空,则对升序序列使用默认值1,而对降序序列使用默认值-1026。在【最大值】文本框里设置序列答应的最大值。创建序列时该字段最初为空。假如单击【创建】按钮后该字段为空,则将对升序序列使用默认值1027,而对降序序列使用默认值-1。在【时间间隔】文本框里设置递增序列递增的间隔数值(升序序列)或递减序列递减的间隔数值(降序序列)。创建序列时该字段最初为空,假如单击【创建】按钮后该字段为空,将使用默认值1,该字段只能为正整数。在【初始值】文本框里设置序列的起始值。假如单击【创建】按钮后该字段为空

9、,对升序序列将使用该序列默认的最小值,对降序序列将使用该序列默认的最大值。对【选项】可以设置的参数如下。若选择【循环值】复选框,则表示指定在达到序列最小值或最大值之后,序列应继续生成值。对升序序列来说,在达到最大值后将生成最小值。对降序序列来说,在达到最小值后将生成最大值。假如未选择该复选框,序列将在达到最小值或最大值后停止生成任何值。默认情况下是未选择状态。若选择【排序值】复选框,则指定序列号要按请求次序生成,默认情况下是未选择状态。在【高速缓存】中设置由数据库预分配并存储的值的数目参数。若选择【默认值】单选钮,则表示将设置默认值为20,默认情况下选择此选项;若选择【无高速缓存】单选钮,则表

10、示指定不预分配序列值;若选择【大小】单选钮,则表示在文本框里输入可接受的值,最小值为2,对循环序列来说,该值必须小于循环中值的个数。假如序列能够生成的值数的上限小于高速缓存大小,则高速缓存大小将自动改换为该上限数。完成设置后单击【创建】按钮。(3)成功创建序列后,出现如图9.50所示界面。单击“确定”按钮。(3)读者也可以在【SQLPIusWorksheet】中执行下列SQL程序创建序列。CREATESEQUENCESCOTT.TEMPSEQUENCEINCREMENTBY1STARTWITH1MAXVALUE1.0E28MINVALUE1NOCYCLECACHE20NOORDER【配套程序位

11、置】:第9章createsequence.sq。序列的使用下面介绍在向数据表中插入数据时如何使用序列。(1)首先为实例建立一个数据表“SCOTT.SEQUENCE_TABLE”,为简化起见,该数据表仅包含一个类型为“NUMBER”的数据列“NO”。在如图9.51所示的创建表的【一般信息】选项卡中进行如下设置。在【名称】文本框中输入“SEQUENCE_TABLE”。在【方案】下拉列表框中选择“SCOTT”。在【表空间】下拉列表框中选择“USERS”。在【名称】单元格中输入“NO”,在【数据类型】下拉列表框单元格中选择“NUMBER完成设置后单击【创建】按钮。(2)读者也可以在【SQLPlusWo

12、rksheet】中执行下列SQL代码创建数据表SCOTT.SEQUENCE_TABLE”。CREATETABLESCOTT.SEQUENCE_TABLE(NONUMBER(10)NOTNULL)TABLESPACEUSERS【配套程序位置】:第9章createsequencetable.sq。(3)在插入新的记录时,使用刚创建的“TEMPSEQUENCE”序列来自动产生“NO”数据列的值。在【SQLPlusWorksheet】里执行下面的SQL代码,执行的结果如图9.52所示。INSERTINTOSCOTT.SEQUENCE_TABLE(NO)VALUES(SCOTT.TEMPSEQUENCE

13、.NEXTVAL);【配套程序位置】:第9章insertsequencetable.sql。“SCOTT.TEMPSEQUENCE.NEXTVAL”表分配下一个惟一的、可用的序列号。执行“SCOTT.TEMPSEQUENCE.NEXTVAL”后,可以使用“SCOTT.TEMPSEQUENCE.CURRVAL”来标识上一个已经存储的序列值。(4)在【SQLPlusWorksheet】中可以执行查询数据表“SCOTT.SEQUENCE_TABLE”数据的语句。执行结果如图9.53所示,表明序列“SCOTT.SEQUENCE”产生的值已经成功录入数据表中。select*fromscott.sequence_table;【配套程序位置】:第9章selectsequencetable.sql。点击查看大图序列的删除下面介绍在【企业治理器】中如何删除序列。(1)在创建好的序列“SEQUENCE1”上用单击鼠标右键,在出现的快捷菜单里选择【移去】选项,如图9.54所示。(2)出现如图9.55所示的【删除序列确认】界面,单击【是】按钮。资料引用:

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!