您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > oracle数据库ppt+中科院培训专用Les12_cn
第十二章其它数据库对象Copyright©OracleCorporation,2001.Allrightsreserved.其它数据库对象进度表:时间主题20分钟讲演20分钟练习40分钟总共中国科学院西安网络中心©2005OracleSQL入门12-1第十二章其它数据库对象幻灯片212-2Copyright©OracleCorporation,2001.Allrightsreserved.目标完成本课后,您应当能够执行下列操作:•创建、维护和使用序列•创建和维护索引•创建私有和公有同义词课程目标在本课中,你将学习怎样创建和维护一些其它用途的数据库对象,这些对象包括序列、索引和同义词。中国科学院西安网络中心©2005OracleSQL入门12-2第十二章其它数据库对象幻灯片312-3Copyright©OracleCorporation,2001.Allrightsreserved.数据库对象说明基本存储单元;由行和列组成来自一个或者多个表的数据子集的逻辑表示产生主键的值改善某些查询的性能一个对象的替换名字对象表视图序列索引同义词数据库对象许多应用程序要求使用唯一的数字作为主键的值。你即可以在应用程序中构建代码来处理这种需求,也可以用一个序列来产生唯一的数字。如果你想要增进某些查询的性能,你应该考虑创建一个索引。你也可以用索引在列或列的集合上强制唯一性。你可以用同义词为对象提供可替代的名字。中国科学院西安网络中心©2005OracleSQL入门12-3第十二章其它数据库对象幻灯片412-4Copyright©OracleCorporation,2001.Allrightsreserved.什么是序列?序列:•是自动产生的唯一的数•是可共享的对象•典型的用途是创建一个主键值•可以代替应用程序编号•当使用高速缓存存储器时,访问序列值的效率提高什么是序列?序列是用户创建的数据库对象,序列可以被多个用户共享以产生唯一的整数。序列的一个典型的用途是创建一个主键的值,它对于每一行必须是唯一的。序列由一个Oracle内部程序产生并增加或减少。序列是一个节省时间的对象,因为它可以减少应用程序中产生序列程序的代码量。序列号独立于表被存储和产生,因此,相同的序列可以被多个表使用。中国科学院西安网络中心©2005OracleSQL入门12-4第十二章其它数据库对象幻灯片512-5Copyright©OracleCorporation,2001.Allrightsreserved.CREATESEQUENCE语句语法定义一个序列来自动产生有顺序的数:CREATESEQUENCEsequence[INCREMENTBYn][STARTWITHn][{MAXVALUEn|NOMAXVALUE}][{MINVALUEn|NOMINVALUE}][{CYCLE|NOCYCLE}][{CACHEn|NOCACHE}];CREATESEQUENCEsequence[INCREMENTBYn][STARTWITHn][{MAXVALUEn|NOMAXVALUE}][{MINVALUEn|NOMINVALUE}][{CYCLE|NOCYCLE}][{CACHEn|NOCACHE}];创建序列用CREATESEQUENCE语句自动产生序列数。在语法中:sequence是序列发生器的名字INCREMENTBYn指定序列号之间的间隔,在这儿n是一个整数(如果该子句被省略,序列增量为1)STARTWITHn指定要产生的第一个序列数(如果该子句被省略,序列从1开始)MAXVALUEn指定序列能产生的昀大值NOMAXVALUE对于升序序列指定10^27为昀大值,对于降序序列指定-1为昀大值(这是默认选项)MINVALUEn指定昀小序列值NOMINVALUE对于升序序列指定1为昀小值,对于降序序列指定-(10^26)为昀小值(这是默认选项)CYCLE|NOCYCLE指定序列在达到它的昀大或昀小值之后,是否继续产生(NOCYCLE是默认选项)CACHEn|NOCACHE指定Oracle服务器预先分配多少值,并且保持在内存中(默认情况下,Oracle服务器缓冲20个值)中国科学院西安网络中心©2005OracleSQL入门12-5第十二章其它数据库对象幻灯片612-6Copyright©OracleCorporation,2001.Allrightsreserved.创建序列•创建一个序列,命名为DEPT_DEPTID_SEQ,用于DEPARTMENTS表的主键•使用非CYCLE选项CREATESEQUENCEdept_deptid_seqINCREMENTBY10STARTWITH120MAXVALUE9999NOCACHENOCYCLE;Sequencecreated.CREATESEQUENCEdept_deptid_seqINCREMENTBY10STARTWITH120MAXVALUE9999NOCACHENOCYCLE;Sequencecreated.Sequencecreated.创建序列(续)幻灯片中的例子创建一个序列,并被命名为DEPT_DEPTID_SEQ,该序列用于DEPARTMENTS表的DEPARTMENT_ID列,该序列从120开始,不允许高速缓冲的,不循环。如果序列用于产生主键值,不使用CYCLE选项,除非你有一个可靠的机制比序列循环更快地清除旧的行。更多信息,见Oracle9iSQLReference,“创建序列”注:序列不依赖于一个表,通常,你应该命名序列;可是序列可以被用在任何地方,而不管它的名字。教师注释如果INCREMENTBY值是负数,序列是降序。另外,ORDER|NOORDER选项可用,ORDER选项保证序列值按顺序产生,如果你将序列用于产生主键值它是不重要的,该选项仅与ParallelServer(并行服务)选项有关。如果序列值被高速缓冲,如果系统故障它们将被丢失。中国科学院西安网络中心©2005OracleSQL入门12-6第十二章其它数据库对象幻灯片712-7Copyright©OracleCorporation,2001.Allrightsreserved.确认序列•校验在USER_SEQUENCES数据字典表中的序列值•如果NOCACHE被指定,LAST_NUMBER列显示下一个可用序列数SELECTsequence_name,min_value,max_value,increment_by,last_numberFROMuser_sequences;SELECTsequence_name,min_value,max_value,increment_by,last_numberFROMuser_sequences;确认序列一旦创建了序列,它就被文本化在数据字典中。因为序列是一个数据库对象,你可以在USER_OBJECTS数据字典表中识别它。你也可以从USER_SEQUENCES数据字典视图中用选择确认序列的设置。教师注释演示:12_dd.sql目的:举例说明USER_SEQUENCES数据字典视图和它的内容。中国科学院西安网络中心©2005OracleSQL入门12-7第十二章其它数据库对象幻灯片812-8Copyright©OracleCorporation,2001.Allrightsreserved.NEXTVAL和CURRVAL伪列•NEXTVAL返回下一个可用的序列值,它每次返回一个唯一的被引用值,即使对于不同的用户也是如此•CURRVAL获得当前的序列值•在CURRVAL获得一个值以前,NEXTVAL对该序列必须发布使用序列在创建序列后,它产生连续的数给你在表中使用。用NEXTVAL和CURRVAL伪列引用序列值。NEXTVAL和CURRVAL伪列NEXTVAL伪列用于从指定的序列中取回连续的序列数的下一个值。你必须用序列名限定NEXTVAL,当你引用sequence.NEXTVAL时,一个新的序列数被产生并且当前的序列数被放入CURRVAL。CURRVAL伪列被用于查阅当前当前用户刚才产生的序列数,NEXTVAL必须被在CURRVAL可以被引用之前用于在当前用户的会话中产生一个序列数,你必须用序列名限定CURRVAL,当sequence.CURRVAL被引用时,昀后返回给用户程序的值被显示。中国科学院西安网络中心©2005OracleSQL入门12-8第十二章其它数据库对象幻灯片912-9Copyright©OracleCorporation,2001.Allrightsreserved.使用NEXTVAL和CURRVAL的规则你可以在下面的上下文中使用NEXTVAL和CURRVAL:一个不是子查询的一部分的SELECT语句的SELECT列表在一个INSERT语句中子查询的SELECT列表一个INSERT语句中的VALUES子句一个UPDATE语句的SET子句你不能在下面的上下文中使用NEXTVAL和CURRVAL:一个视图的SELECT列表一个带DISTINCT关键字的SELECT语句一个带GROUPBY、HAVING或ORDERBY子句的SELECT语句一个在SELECT、DELETE或UPDATE语句中的子句在CREATETABLE或ALTERTABLE语句中的DEFAULT表达式更多信息,见Oracle9iSQLReference,“伪列”部分和“创建序列”。教师注释明确指出本页列出的规则。中国科学院西安网络中心©2005OracleSQL入门12-9第十二章其它数据库对象幻灯片1012-10Copyright©OracleCorporation,2001.Allrightsreserved.使用序列•在locationID2500中插入一个新部门名称“Support”•查看当前的DEPT_DEPTID_SEQ序列值INSERTINTOdepartments(department_id,department_name,location_id)VALUES(dept_deptid_seq.NEXTVAL,'Support',2500);1rowcreated.INSERTINTOdepartments(department_id,department_name,location_id)VALUES(dept_deptid_seq.NEXTVAL,'Support',2500);1rowcreated.1rowcreated.SELECTdept_deptid_seq.CURRVALFROMdual;SELECTdept_deptid_seq.CURRVALFROMdual;使用序列幻灯片的例子在DEPARTMENTS表中插入一个新的部门。在该例子中使用DEPT_DEPTID_SEQ序列产生一个新的部门号:你可以查看当前的序列值:SELECTdept_deptid_seq.CURRVALFROMdual;CURRVAL---------120现在设想你想要雇用雇员充当新部门的职员,对所有新雇员被执行的INSERT语句可以包含下面的代码:INSERTINTOemployees(employee_id,department_id,...)VALUES(employees_seq.NEXTVAL,dept_deptid_seq.CURRVAL,...);注:前面的例子假定一个称为EMPLOYEE_SEQ序列已经被创建用来产生新的雇员号。中国科学院西安网络中心©2005OracleSQL入门12-10第十二章其它数据库对象幻灯片1112-11Copyright©OracleCorporation,2001.Allrightsreserved.使用序列•可以更快地访问缓存在存储器中的序列值•序列值可能产生间隙,由于:–一个回退发生–系统崩溃–一个序列被用于另一个表•如果带NOCACHE创建序列,查询USER_SEQUENCES表,可以查看下一个可用值缓存序列值在内存中缓冲序列可以对序列值更快地存取,在你第一
本文标题:oracle数据库ppt+中科院培训专用Les12_cn
链接地址:https://www.777doc.com/doc-5900417 .html