Oracle创建序列的方法及技巧
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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_Agents
INCREMENT BY 1
START 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,该字段只能为正整数。
在【初始值】文本框里设置序列的起始值。假如单击【创建】按钮后该字段为空,对升序序列将使用该序列默认的最小值,对降序序列将使用该序列默认的最大值。
对【选项】可以设置的参数如下。