ORACLE11g试题答案(陈冬亮) 下载本文

目 录

第一章 Oracle 11g 介绍................................................................................................................... 2 第二章 ORACLE 11g 的体系结构 ....................................................................................................... 4 第三章 ORACLE 11g 的数据库管理 ................................................................................................... 8 第四章 ORACLE 11g 的表空间管理 ................................................................................................. 10 第五章 ORACLE 11g 的表管理 ......................................................................................................... 13 第六章 ORACLE 11g 的数据查询 ..................................................................................................... 18 第七章 ORACLE 数据的基本操作 ..................................................................................................... 23 第八章 索引 ...................................................................................................................................... 28 第九章 视图 ...................................................................................................................................... 33 第十章 PL/SQL基础 ......................................................................................................................... 37 第十一章 存储过程与函数 ............................................................................................................... 43 第十二章 触发器 .............................................................................................................................. 48 第十三章 游标 .................................................................................................................................. 51 第十四章 安全管理 .......................................................................................................................... 53 第十五章 数据库备份与恢复 ........................................................................................................... 56

1

第一章 Oracle 11g 介绍

一、选择题

1.在数据库系统中,将满足以下两个条件的基本层次联系集合称为层次模型:( B )。 ① 有一个结点无双亲 ② 其它结点无双亲

③ 有且仅有一个结点无双亲 ④ 其它结点有且仅有一个双亲 ⑤ 允许其它结点有多个双亲

A.①和② B.③和④ C.③和⑤ D.②和⑤ 2.下列有关数据库的描述,正确的是( C ) A.数据库是一个DBF文件 B.数据库是一个关系

C.数据库是一个结构化的数据集合 D.数据库是一组文件

3.根据关系数据基于的数据模型——关系模型的特征判断下列正确的一项:( B ) A.只存在一对多的实体关系,以图形方式来表示。

B.以二维表格结构来保存数据,在关系表中不允许有重复行存在。 C.能体现一对多、多对多的关系,但不能体现一对一的关系。 D.关系模型数据库是数据库发展的最初阶段。 4.Oracle 11g 是基于( A )的

A.关系型 B.文件系统 C.层次型 D.网络型 5. 用二维表结构表达实体集的模型是( D ) A.概念模型 B.层次模型 C.网状模型 D.关系模型

6.下列四项中说法不正确的是( C )

A.数据库减少了数据冗余 B.数据库中的数据可以共享

C.数据库避免了一切数据的重复 D.数据库具有较高的数据独立性 7.下列四项中,不属于关系数据库特点的是( D ) A.数据冗余小 B.数据独立性高 C.数据共享性好 D.多用户访问

下面系统中不属于关系数据库管理系统的是( C ) A. Oracle B. MS SQL Server C. IMS D. DB2 9. MS SQL Server是( D )

A. 数据库 B. 数据库系统 C. 数据处理系统 D. 数据库管理系统 二、填空题

1.在数据库系统中管理数据的软件称为___数据库管理系统________。

2. 数据库中数据模型可分为三种类型: 层次模型 、 网状模型 和 关系模型 。 3.用树型结构表示实体类型及实体间联系的数据模型称为__层次模型__。

4.数据库系统各类用户对数据库的各种操作请求(数据定义、查询、更新及各种控制)都是由

2

一个复杂的软件来完成的,这个软件叫做__数据库管理系统___。 三、简答题

1.解释什么是Oracle Database 11g系统中关键网格技术? 解:

Oracle 11g中“g”是grid的缩写,表示网格,网格计算是一种技术,能对同源不同计算类型的分布式网络进行无缝地、大规模地扩展,允许不同厂商的计算机共同工作来提供无尽的共享计算机资源。比如,有两台PC机,分别来自不同厂商,内存均为516M,现系统运行要求1G的内存,若PC机单独执行肯定不能满足要求,可以通过网格计算和集群技术将两台PC机组合在一起,以满足系统运行需求。

2.解释Oracle Database 11g的基本文件目录的含义? 解:

在Oracle Database 11g中,Oracle的目录结构是由Oracle_Base及其子目录Oracle_Home、admin、flash_recovery_area和oradata目录构成的。为方便讨论,用Oracle_Base代表Oracle目录树的根,用Oracle_Home表示根目录下的主目录。

(1) Oracle_Base目录

Oracle_Base代表Oracle目录树的根。如果使用Oracle Universal Installer进行安装,则Oracle_Base是指system_drive:\\oracle\\product\\10.2.0。

(2)Oracle_Home目录

Oracle_Home主目录位于system_drive:\\Oracle_Base之下,它包含与Oracle软件运行有关的子目录和网络文件以及选定的组件等;若在主机上第一次且只安装了Oracle数据库,没有其他Oracle产品,则使用默认的主目录\\db_1;如果在同一台主机的同一个根目录下安装多个产品或安装了第2次,则Oracle_Home主目录会以db_n的形式出现,即db_2、db_3等。这也是为什么在Oracle_Base目录可以有多个Oracle_Home目录的缘故。

Oracle_Home目录中包括的主要子目录有: ·\\BIN——主要包含用于数据库管理的各种命令等。 ·\\css——与Oracle Cluster Synchronization服务有关的文件。 ·\\dbs——存放数据库服务器端的参数文件Spfile。 ·\\demo——存放数据库实例模式的脚本等。 · \\install——用于存储ORACLE安装后的端口号,iSQL*Plus以及Enterprise Manager Database Control启动并登录的方式等。

·\\network\\admin——有关监听器listener.ora和sqlnet.ora以及tnsnames.ora等。 ·\\sysman\\config——用于与Oracle Enterprise Management有关的端口管理等。 (3)admin目录

数据库管理文件均存储在oracle_base\\admin\\db_name目录下。各个子目录的主要含义如下: ·\\bdump——后台进程跟踪文件。 ·\\cdump——信息转储文件(core dump)。 ·\\create——数据库创建文件。 ·\\exp——数据库导出文件。

3

·\\pfile——初始化参数文件。 ·\%udump——用户SQL追踪文件。 (4)Oradata目录

数据库文件存储在Oracle_Base\\oradata\\db_name目录下,该目录主要存储数据库的控制文件、数据文件、重做日志文件。其中*.dbf文件对应数据库中每个表空间;.ctl文件为控制文件;.log文件对应重做日志文件组及其成员。

(5)flash_recovery_area目录

flash_recovery_area目录存储并管理与备份和恢复有关的文件。它包含系统中每个数据库的子目录。该目录可用于存储与恢复有关的文件,如控制文件、联机重做日志副本、归档日志、闪回日志以及Oracle数据库恢复管理器(RMAN)备份等。

3. 解释$ORACLE_HOME和$ORACLE_BASE的区别? 解:

$ORACLE_BASE下是admin和product;$ORACLE_HOME下则是ORACLE的命令、连接库、安装助手、listener等。$ORACLE_HOME比$ORACLE_BASE目录要更深一些,ORACLE_HOME=$ORACLE_BASE/product/version。$ORACLE_BASE是oracle的根目录,$ORACLE_HOME是oracle产品的目录。如果装了2个版本的oracle,那么$ORACLE_BASE可以是一个,但$ORACLE_HOME是2个。

第二章 ORACLE 11g 的体系结构

一、单项选择题 1.( A )是Oracle服务器在启动期间用来标识物理文件和数据库结构的二进制文件。 A.控制文件 B.参数文件 C.数据文件 D.日志文件 2.( B )进程主要职责是监控服务器进程和注册数据库服务。 A.SMON B.PMON C.CHKT D.LGWR

3.( C )代表了数据库中最小粒度的逻辑数据存储层次。 A.盘区 B.表空间 C.数据块 D.数据文件

4.用于在启动实例时配置数据库,确定Oracle 11g的运行环境文件是( A ) A.参数文件 B.数据文件 C.可执行文件 D.控制文件

5.下列选项中,哪一部分不是Oracle实例的组成部分?( C )

4

A.系统全局区SGA B.PMON后台进程 C.控制文件 D.Dnnn调度进程 6.在全局存储区SGA中,哪部分内存区域是循环使用的?( B ) A.数据缓冲区 B.日志缓冲区 C.共享池 D.大池

7.解析后的SQL语句在SGA的哪个区域中进行缓存?( C ) A.数据缓冲区 B.日志缓冲区 C.共享池 D.大池 8.如果服务器进程无法在数据缓冲区中找到空闲缓存块,以添加从数据文件中读取的数据块,则将启动如下哪个进程?( A ) A.DBWR B.LGWR C.SMON D.PMON

9.如果服务器进程非正常终止,Oracle系统将使用下列哪一个进程以释放它所占用的资源?( D )

A.DBWR B.LGWR C.SMON D.PMON

10.下列哪个进程用于将修改过的数据从内存保存到磁盘数据文件中?( A ) A.DBWR B.LGWR C.RECO D.ARCH

11.当数据库运行在归档模式下时,如果发生日志切换,为了保证不覆盖旧的日志信息,系统将启动哪个进程?( D )

A.DBWR B.LGWR C.SMON D.ARCH 12.下面哪个描述是正确的?( A )

A.表空间由段组成,段由盘区组成,盘区由数据块组成。 B.段由表空间组成,表空间由盘区组成,盘区由数据块组成。 C.盘区由数据块组成,数据块由段组成,段由表空间组成。 D.数据块由段组成,段由盘区组成,盘区由表空间组成。 二、填空题

1.在Oracle 11g的文件系统中包含多种类型的文件,这些文件是 数据文件 、 控制文件 、 日志文件 、 参数文件 、口令文件、跟踪文件、警告日志文件等。

2.一般地,Oracle的后台进程包括 数据写入进场DBWR 、 日志写入进场LGWR 、 检查点进程CKPT 、 系统监控进场SMON 、 进程监控进场PMON 、 归档进程ARCH 、恢复进程RECO、封锁进程LCKn、调度进程Dnnn、服务器进程Snnn、作业进程SNP等。 3.一个表空间物理上对应一个或多个 数据 文件。

4.用户对数据库的操作如果产生日志信息,则该日志信息首先存储在 日志缓冲区 中,随后由 LGWR 进程保存到 日志文件 。

5.在Oralce的逻辑存储结构中,根据存储数据的类型,可将段分为 数据段 、索引段 回退段 、LOB段和 临时段 。

6.Oracle数据库由一个或多个称为 表空间 的逻辑存储单元组成。

7. 内存结构是指一个进程在其中进行自身对话或与其他进程对话的内存区域,Oracle使用两种类型的内存结构,一种是 SGA ;另一种是 PGA 。

8. 数据字典试图分成3类:DBA_、 ALL_ 和 USER_ 视图,DBA_视图包含了数据库所有对象的信息, ALL_视图包含了用户查询表时可以访问的所有对象的信息, USER_ 视图包含了用户查询表时表所拥有的全部对象的信息。 三、问答题

5

1.简要介绍数据文件、表空间、段、盘区和数据块之间的关系。 解: 成。

Oracle

2.简要描述Oracle数据库体系的物理结构。 解:

Oracle数据库体系的物理结构是指数据库上实际的、可以从操作系统看到的文件,可以利用操作系统指令进行管理作业,物理存储结构组成文件如下所列:

(1)数据文件(Data File):实际存储数据的地方; (2)在线重做日志文件(Online Redo Log File):

(3)控制文件(Control File):性的信息;

(4)初始化参数文件(Parameter File):用来架构出Oracle内存结构的文件;

(5)密码文件(Password File):验证哪些帐号能开启、关闭Oracle数据库。

3.介绍Oracle实例系统中,各后台进程的作用。 解:

(1)DBWRn(Database Writer)的主要工作是将数据缓冲区中被改过的数据写回到数据文件里;

(2)LGWR(Log Writer)主要的工作是将Redo Log Buffer里的记录写到在线重做日志文件中;

(3)SMON(System Monitor)有两个主要的功能。<1>执行Instance Recovery:当数据库不正常中断后再度开启时,SMON会自动执行Instance Recovery,也就是会将在线重做日志里面的数据回写到数据文件里面。<2>收集空间:将表空间内相邻的空间进行合并的动作;

(4)PMON(Process Monitor):监视数据库的用户进程。若用户的进程不当而被中断,PMON会负责清理任何遗留下来的资源,并释放失效的进程所保留的锁,然后从Process List中移除,以终止Process ID;

(5)CKPT(Checkpoint)主要负责更新数据库的最新状态,CKPT当Checkpoint会更新控制文件和数据库文件的文件头;

(6)ARCn(Archiver)当Oracle数 据 库 设 定 为ARCHIVELOG Mode时,ARCn 会在Log Switch时自动将Redo Log FileArchivedredologs。

4. 数据字典包含了哪些信息?具有什么功能?

6

解:

数据字典是Oracle数据库的核心组件,它是由一系列只读的基础表和视图组成的,它保存了关于数据库本身以及其中存储的所有对象的基本信息。对数据字典的管理和维护由Oracle系统负责,任何数据库用户都无法对数据字典中内容进行修改,但是可以查看数据字典的内容。为了方便用户查看数据字典中的信息,数据字典中的信息通过表和视图的形式组织起来。数据字典中的内容都被保存在System表空间中,大多数情况下,用户可以通过数据字典视图来获取与数据库相关的信息,而不需要访问数据字典表。

用户所使用的数据字典视图大致分为三类,并且各种类型的视图以不同名称的前缀表示。这三类视图如下:

(1)USER视图是以USER_字符为名称前缀的数据字典视图。每个数据库用户都有一组属于自己的视图,在USER视图中包含了该用户模式下所有对象的信息。

(2)ALL视图 ALL视图是以ALL_字符为名称前缀的数据字典视图。ALL数据字典视图是USER视图的扩展,在ALL视图中记录了属于该用户模式的所有对象的信息以及该用户可以访问的属于其他模式的对象的信息。

(3)DBA视图 DBA视图是以DBA_字符为名称前缀的数据字典视图。在DBA数据字典视图中记录了全部数据库对象的信息。

5. 在确定数据块大小(DB_BLOCK_SIZE)的时候,要注意考虑哪些因素? 解:

如果行很小,而且访问是随机的,则应选用较小的块; 如果行很小,而且访问是顺序的,则应选用较大的块;

如果行很小,而且访问既是随机又是顺序的,那么就应该选用较大的块; 如果行很大,应该选用较大的块。

6. PctUsed和PctFree 表示什么含义,有什么作用?

解: PctUsed:为一个百分比数值,当BLOCK中已经使用的空间降低到该数值以下时,该BLOCK才是可用的,达到或是超过这个数值的BLOCK是不可用的。

PctFree:用于指定BLOCK中必需保留的最小空间的比例。

一般在控制具有独立segment结构的对象时,可使用PctFree和PctUsed参数控制数据块何时进入或离开表、索引或簇的可用清单。

使用PctUsed参数设置最小块的阈值来控制一个数据块应在何时放回到相应段的可用清单中。例如,所有段的缺省PctUsed设置为40%,因此,当事务处理删除数据块中的行时,如果它只有39%是装满的,ORACLE将该数据块放回到相应段的可用清单中。如果你预计很少有删除操作,则可设置PctUsed为较高的值(如60),当偶然的删除操作发生时,使数据块弹出可用清单。但是,如果你预计将PctUsed 设置为较低的值(如40),使ORACLE不常产生块在表的可用空间中移进或移出的开销。

使用PctFree参数设置最大的阈值,以控制对将来的行的更新操作保留多少数据块空间。当某个数据块使PctFree装满时,ORACLE从相应段的可用清单中删除该块。如果你预计只有

7

很少的更新操作会增加行的大小,则可将PctFree设置为较低的值(如5或者10),使得ORACLE填满每个块的更多的空间。但是,如果你预计更新操作将会经常增加行的大小,则将PctFree设置为较高的值(如20或30),使得ORACLE为已有行的更新操作保留更多的块空间;否则,将出现行链。

7.SGA主要有那些部分,主要作用是什么? 解:

(1)数据高速缓冲区:存放着Oracle系统最近使用过的数据库数据块;

(2)共享池:相当于程序高速缓冲区,所有的用户程序都存放在共享SQL池中; (3)重做日志缓冲区:用于缓冲区在对数据进行修改的操作过程中生成的重做记录。

第三章 ORACLE 11g 的数据库管理

一、单项选择题

1.下列哪个部分不是oracle实例的组成部分?( C )

A.系统全局区域 B. 服务器进程 C.数据库作者 D.系统监控器

2.你用DBCA建立了一个数据库而没有保存模版定义。现在你打算用DBCA拷贝整个数据库和数据,下列哪个是首先要做的?( D )

A.使用脚本建立新的数据库,使用DBCA导入数据

B.用DBCA模版管理从现有数据库建立一个新的数据库,数据也如此导入 C.从模版列表中选择先前建立的数据库模版并建立数据库

D.从现有数据库中拷贝数据文件建立新的数据库,然后利用DBCA拷贝数据

3. 你正在你的组织紧急事件处置演习中。几乎没有时间通报用户,你就需要尽快地停止数据库进程。下列命令哪个是你需要要执行的?( D ) A. shutdown abort B. shutdown transactional C. shutdown D. shutdown immediate 4. 你正在用共享服务器管理一个数据库。Large_pool_size是50M。你执行命令:alter system set Large_pool_size=100M scope=memory后然后关闭并重启数据库。现在Large_pool_size是多少?( A )

A. 50M B. 默认Large_pool_size大小

8

C. 100M D.和使用中的oracle SPfile设置的一样

5. 你使用下列命令连接数据库:sqlplus scott/trigger@abc.com:1522/orcl.目标数据库是哪一个?( A )

A. abc.com B.tiger C. orcl D. scott E. 以上都不是 6. 下列哪个不是有效的数据库状态?( A ) A. 开机 B. 关闭 C. 启动 D. 装载 E. 不装载

7. 如果一个数据库举例(instance)失败,但是没有停止运行,你必须使用哪个命令使实例恢复能被执行?( B )

A.startup nomount B. shutdown immediate; start force C.startup mount D.shutdown abort; startup

8. Oracle数据库由一个或多个称为()的逻辑存储单元组成。( B ) A.表 B.表空间 C.行 D.单元 二、填空题

1. 如果用户需要在已经安装好了的Oracle系统上创建,修改或者删除数据库,就需要使用 DBCA 。

2. 启动数据库时,如果装载数据库但打不开数据库可执行 STARTUP MOUNT 命令。 3. 采用终止模式关闭数据库,可执行 SHUTDOWN ABORT 命令。

4. 数据库的初始化参数DB-NAME的长度最大可为 8 个字符。

5. 数据库实例 ,也被称作数据库服务或服务器,是一组操作系统进程和内存区域.Oracle使用他们来管理数据库访问。

6.每个Oracle 11g数据库在创建后都有4个默认的数据库用户: system 、 sys 、 sysman和DBcnmp。

7. 字符集中的NLS-LANG参数包含3个组成部分: 语言 、 地域 、字符集 。

8.可通过在SQL*Plus中查询动态视图 VINSTANCE 来查看实例的禁止操作状态。 三、问答题

1. Oracle数据库在创建后都会有4个默认数据库用户,简要说明它们的功能? 解:

4个默认的数据库用户分别为:SYS、SYSTEM、SYSMAN和DBSNMP。

(1)SYS,默认密码为CHANGE_ON_INSTALL,当创建一个数据库时,SYS用户将被默认创建并授予DBA角色,所有数据库数据字典中的基本表和视图都存储在名为SYS的方案中,这些基本表和视图对于Oracle数据库的操作时非常重要的。为了维护数据字典的真实性,SYS方案中的表只能由系统来维护,他们不能被任何用户或数据库管理员修改,而且任何用户不能在SYS方案中创建表;

(2)SYSTEM,默认密码为MANAGER,与SYS一样,在创建Oracle数据库时,SYSTEM用户被默认创建并被授予DBA角色,用于创建显示管理信息的表或视图,以及被各种Oracle数据库应用和工具使用的内容表或视图;

(3)SYSMAN是Oracle数据库中用于EM管理的用户,如果你不用该用户,也可以删除。 (4)DBSNMP是Oracle数据库中用于智能代理(Intelligent Agent)的用户,用来监控和管理数据库相关性能的用户,如果停止该用户,则无法提取相关的数据信息。

9

2. 如何转换init.ora到spfile ? 解:

使用Create spfile from pfile命令。

3. 给出数据库正常启动所经历的几种状态 ? 解:

(1)STARTUPNOMOUNT–数据库实例启动; (2)STARTUPMOUNT-数据库装载; (3)STARTUPOPEN–数据库打开。

第四章 ORACLE 11g 的表空间管理

一、单项选择题

1. 对于系统表的空间,Oracle建议的大小是( D ) A.100M B. 200M C.300M D.400M E.500M 2. 下列动态视图中,( C )是从控制文件中得到的所有表空间的名称和数量。 A.V$INSTANCE B.V$DATABASE C.V$TABLESPACE D.V$DATAFILES 3. 如果一个表空间脱机在哪里查看?( B )

A. dba_tablespaces B. v$ tablespaces C. v$database D. dba_datafile_status 4.下面哪个参数不能在STORAGE子句中进行设置( B ) A. INITIAL B. PCTUSED C. MINEXTENTS D. NEXT 5.Oracle数据库的最小I/O单位是( D ),最小磁盘分配单位是( C ) A. 表空间 B. 段 C. 盘区 D. 数据块

6.在设置自动撤消管理时,下列( B )参数用于设置所使用的撤消表空间,( C 参数用于设置撤消数据的保留时间。

A.UNDO_MANAGEMENT B. UNDO_TABLESPACE C.UNDO_RETENTION D. ROLLBACK_SEGMENTS

10

)7.把一个表空间切换到OFFLINE状态时,可以使用4个参数,不包括下列哪个选项?( D ) A.IMMEDIATE B.NORMAL C.TEMPORARY D.FORCE 8.在设置撤消表空间的自动管理功能时,DBA通过使用相关的初始化参数对自动撤消表空间进行配置。下面的4个参数中,哪一个不是与自动撤消管理功能相关的参数?( D ) A.UNDO_MANAGEMENT B. UNDO_TABLESPACE C.UNDO_RETENTION D. TRANSACTIONS

二、填空题

1.表空间是Oracle数据库中数据的逻辑组织,每个数据库至少有一个 系统 表空间。

2.表空间是O racle数据库中数据的逻辑组织,它存储段的集合,在操作系统级映到一个或多个 数据文件 上。

3.创建表空间时Oracle允许指定后来创建的,并分配给表空间的对象的默认存储参数。其中 INITIAL 参数设置创建时分配给每一个新对象的初始区间的大小。

4. 创建表空间时,创建表空间的对象的默认存储参数中,INITIAL参数和 NEXT 参数通常大小相同。

5. DBA-TS-QUOTAS 动态视图中列举了所有用户的表空间配额。 6. DBA_FREE_SPACE 视图用来判断tablespace的剩余空间。

7.表空间的管理类型分为 本地管理表空间(LMT) 和 数据字典管理表空间(DMT) 。 8.一个表空间具有 离线(OFFLINE)、在线(ONLINE)、只读(READ ONLY)和 读写(READ WRITE)。

9.创建UNDO表空间时,所使用的表空间管理方式为 本地管理表空间 ,并且盘区的管理方式只允许使用 临时表空间 方式。 三、问答题

1.TEMPORARY表空间和PERMANENT 表空间的区别是什么? 解:

(1)永久性表空间(Permanent)

用户需要保留的任何段和一个会话或事务的应用数据都保留在永久性表空间,如SYSTEM和SYSAUX表空间。从Oracle 11g开始,SYSTEM表空间默认为本地化管理,表空间第一个数据文件中的位图段管理所有的空间使用。

(2)临时表空间(Temporary)

数据库中可同时在线和激活多个临时表空间,但Oracle 11g前同一用户的多个会话共享一个临时表空间,因为仅只有一个默认的临时表空间可被赋给用户。为解决潜在的性能瓶颈,Oracle支持临时表空间组.临时表空间组由至少一个临时表空间组成。

2.本地管理表空间和字典管理表空间的含义与特点是什么? 解:

(1)字典管理表空间(DMT)

Oracle使用SYS.FET$表来记录空闲空间,使用SYS.UET$表来记录已经使用过的空间。当从表空间分配新的Extent时,必须先获得space transaction(ST) enqueue latch后才能插

11

入或删除SYS.FET$和SYS.UET$表。在特定的时间内,只有一个进程能获得ST enqueue,这通常会引起竞争和等待。

(2)本地管理表空间(LMT)

使用LMT,每个表空间使用表空间数据文件中的一个bitmap结构来管理空闲和已使用的空间的元数据信息。每一bit对应一个数据库block或一组blcok。

本地管理表空间的好处:

(1)不需要使用recursive sql访问UET$和FET$

(2)消除了对于UET$和FET$的竞争(single ST enqueue) (3)不用定期连接空闲空间,LMT会自动跟踪相邻的空闲空间。

(4)使用LMT时,分配extent只是改变segment header中的bitmap structure,不会产生回滚信息。

3.什么是自动撤消管理,它有什么好处? 解:

自动撤销管理允许DBA指定撤销信息在提交之后需要保留的时间,以防止在长时间的查询过程中出现“snapshot too old”的错误。可以通过设置UNDO_RETENTION参数来实现这一过程。这一参数的缺省值为900秒(即15分钟),但你可以设置这一参数以保证Oracle保留撤销日志。无需定义和管理回滚段,就可以简单地指定一个撤销表空间而减轻Oracle的负担。

自动撤销管理需要一个当地管理撤销表空间,这一表空间用于存放撤销段。所需要的建立一个撤销表空间,设置UNDO_MANAGEMENT=AUTO,然后与数据库进行连接。当启动一个例子时,Oracle会自动选择第一个可用的撤销表空间。

4.如何创建非标准数据块表空间? 解:

oracle创建表空间相关的参数为bd_block_size 默认的大小即标准的大小,我们如果不指定具体的大小,所创建的表空间的数据块即可db_block_size 所指定的大小进创建的。

如下例:

create tablespace tbs_cb9

datafile '/opt/oracle/oradata/orcl/users09.dbf' size 10M;

当我们创建非标准块的表空间时,如果没有设置db_nk_cache_size 的大小,创建表空间时会报错误.ora-29339,相关描述的意思表空间的数据块大小也配置文件不匹配。一般我们有两种方法进行解决。

查看系统默认的db_block_size大小; show parameter db_block_size; db_block_size integer 8192; create tablespace tbs_cb8

datafile '/opt/oracle/oradata/orcl/users08.dbf' size 10M blocksize 16k;

12

由于我们创建的块大小与系统默认的块大小不一致会报ora-29339 方法1.

如果我们是以spfile方式启动数据库的,我们只需要对执行以下命令即可.由于本系统默认块的大小为8K,所以我以16为例创建一个非标准的表空间.

alter system set db_16K_cache_size = 20M scope = both ; 方法2.

如果我们是以pfile方式启动数据库的, a.关闭数据库

shutdown immediate;

b.在初始化参数据增加(在pfile 里增加,如果show parameter spfile 没有手动创建一个pflle文件进行启动)

db_16K_cache_size = 20M; c.startup pfile = '路径';

第五章 ORACLE 11g 的表管理

一、单项选择题

1.Oracle表的唯一键约束与主键约束的一个区别是( A ) A.唯一键标识的列可以为空 B. 主键标识的列可以为空 C. 唯一键标识的列只可以为单列 D. 主键标识的列只可以为单列 2.下列哪个是无效的列名?( A )

A.1ST_ID B.CUST# C.ADDRESS1 D.EXCEPTION

3.如果希望在激活约束时不验证表中已有的数据是否满足约束的定义,那么可以使用下列哪个关键字?( D )

A.disactive B.validate C.active D.novalidate 4.SQL语言中,删除一个表的命令是( B ) A. DELETE B. DROP C.CLEAR D. REMORE 5. 有一个关系:学生(学号,姓名,系别),规定学号的值域是8个数字组成的字符串,这一规则属于( C )

13

A.实体完整性约束 B.参照完整性约束 C.用户自定义完整性约束 D.关键字完整性约束

6.如果要修改表的结构,应该使用SQL语言的命令( C )

A.UPDATE TABLE B. MODIFY TABLE C.ALTER TABLE D. CHANGE TABLE

7.如果各类元组在表的主键上取值为空值,那么它违反了关系的______A______完整性约束 A. 实体完整性 B. 引用完整性 C. 域完整性 D. 用户 8.下面关于主键约束的描述正确的是( A ) A.主键约束用于唯一的确定表中的每一行数据。 B.在一个表中,最多只能有两个主键约束。 C.主键约束只能由一个列组成。 D.主键约束不能由一个单列组成。

9.如果希望更新表authors中的first_name列为非空,那么可以使用哪个语句?( B ) A.alter table authors add first_name not null B. alter table authors modify first_name not null C. alter table authors alter first_name not null D. alter table authors drop first_name not null

10. 表Sales存储其在某一天所销售的商品。在一张销售单上可以销售多个商品。表Sales的结构如下:

CREATE TABLE Sales

(cSalesNo char(4) not null, cProductID char(4) not null, dDate datetime not null, mPrice money not null, nQty not null)

关于 表Sales,下述哪个陈述为真?( A )

A.属性cSalesNo 和属性 cProductId的组合作为主关键字。 B.属性cSalesNo 和属性cProductId是候选关键字。 C. 选择属性cSalesNo作为主关键字。

D. 如果属性cSalesNo作为主关键字,则cProductId 属性作为替代关键字。

11.雇员的情况和其所工作的部门存储在表Employee和表 Department中。有许多雇员名字 相同但雇员代码不同。除此之外,在一个部门里,可以有多个雇员。 表Employee创建如下: CREATE TABLE Employee

(ECode char(6) not null,Name char(20) not null,DepartmentId char(4) not null) 表Department创建如下: CREATE TABLE Department

(DepartmentId char(4) not null,DepartmentName char(10) not null) 关于这二张表,下述那条陈述为真?( D )

A.通过在表Department的DepartmentId属性上创建外关键字约束对应表Employee的属性

14

DepartmentId来实现实体完整性

B. 通过在表Employee的DepartmentId属性上创建外关键字约束对应表Department的属性DepartmentId来实现实体完整性

C. 通过在表Department的属性DepartmentId上创建外关键字约束对应表Employee的属性DepartmentId来实现引用完整性。

D.通过在表Employee的属性DepartmentId上创建外关键字约束对应表Department的属性DepartmentId来实现引用完整性。

12.下列哪种约束实现域完整性?( A )

A. 主关键字约束。 B. 检查约束。 C.唯一约束。 D.缺省约束。 13.对于主键的说法错误的是( B )。 A. 主键字段输入的数据不允许重复 B. 主键字段的数据,允许输入空值

C. 若主键由多个键组合而成,则某个主键字段可能存在重复值 D. 主键字段可以是字符数据类型 14.下列哪个对象属于模式对象( C ) A.数据段 B.盘区 C.表 D.表空间

15.为了减少表中的链接记录和迁移记录,应当增大表的哪一个存储参数?( A )。 A.PCTFREE B.PCTUSED C.MAXEXTENTS D.PCTINCREASE

16.你定义了一个对象类型myOBJ,要基于该类型来创建表tab1,语句为( C )。 A.CREATE TABLE tab1 OF myOBJ; B.CREATE TABLE myOBJ OF tab1; C.CREATE TABLE tab1 AS myOBJ;

D.CREATE TABLE tab1 TYPE OF myOBJ;

17.在表tab1中有列为col1,其数据类型为INTEGER,在PL/SQL的DECLARE部分声明了一个变量var1,语句为: var1 tab1.col1%TYPE; 不久后,执行了语句:

ALTER TABLE tab1 MODIFY(col1(NUMBER(5,2)); 则var1的数据类型为( B )。

A. 整数型 B. 数字型 C. 字符型 D. 以上皆非 二、填空题

1. 表 是存储数据的数据库段,是Oracle数据库中的数据存储的基本单位。 2.Oracle中 DESCRIBE 命令可以快速掌握表及其中所有表列的概要。

3.表的系统信息包括表的结构和表的属性等信息,可以使用 user_tables、 user_objects 、 user_segments 和 ser_tab_privs 等数据字典查看有关表和列的属性信息。

4. ROWID实际上保存的是记录的 物理地址 ,因此通过ROWID来访问记录可以获得最快的访问速度。

5.为Student表手动分配存储空间,并且大小由NEXT参数设置,则应使用的语句为 ALTER

15

TABLE Student ALLOCATE EXTENT ;如果为Student表手动分配一个大小为128KB的新盘区,则应使用的语句为 ALTER TABLE Student ALLOCATE EXTENT(SIZE 128K) 。

6.填写下列语句,使其可以为class表的ID列添加一个名为PK_CLASS_ID的主键约束。 ALTER TABLE class Add CONSTRAINT PK_CLASS_ID PRIMARY KEY(ID) 。

7.在STORAGE子句中可以设置6个存储参数。其中, INITIAL 指定为表中的数据分配的

第一个盘区大小; NEXT 指定为存储表中的数据分配的第二个盘区大小; PCTINCREASE 指定从第二个盘区之后,每个盘区相对于上一个盘区的增长百分比; MINEXTENTS 指定允许为表中的数据所分配的最小盘区数目; MAXEXTENTS 指定允许为表中的数据所分配的最大盘区数目。

8.创建部门表DEPT(deptid,deptname,address),对应的字段类型均为字符型,字符长度自定,,对应的字段含义分别是(部门号,部门名,地址),其中dept为主关键字,该表创建语句 create table DEPT ( deptid varchar2(100) not null PRIMARY KEY, deptname varchar2(100), address varchar2(100));

comment on column DEPT.deptid is '部门号'; comment on column DEPT.deptname is '部门名'; comment on column DEPT.address is '地址'; 。

9.创建雇员表EMP(empno,empname,deptid,salary), 对应的字段类型分别为char(3)/char(8)/char(2)/float,对应的字段含义分别是(雇员号,雇员名,部门号,工资),其中empno为主关键字,deptid为外键,引用表DEPT的主键。该表创建语句 create table EMP ( empno char(3) not null PRIMARY KEY, empname char(8), deptid char(2), salary float); comment on column EMP.empno is '雇员号'; comment on column EMP.empname is '雇员名'; comment on column EMP.deptid is '部门名'; comment on column EMP.salary is '工资';

CONSTRAINT FK_DEPTNO FOREIGN KEY(DEPTNO) REFERENCES DEPT(DEPTID) 。 三、问答题

1. 简要介绍模式与用户的关系 解:

(1)用户(user):Oracle用户是用连接数据库和访问数据库对象的。(用户是用来连接数据库访问数据库);

(2)模式(schema):模式是数据库对象的集合。模式对象是数据库数据的逻辑结构; (3)用户(user)与模式(schema)的区别:

用户是用来连接数据库对象。而模式用是用创建管理对象的。模式跟用户在oracle 是一

16

对一的关系。

2. 给出两个检查表结构的方法 解:

(1)DESCRIBE命令;

(2)DBMS_METADATA.GET_DDL 包。

3.介绍创建表时常用的数据类型 解:

bit:整型 int:整型

smallint:整型 tinyint :整型

numeric :精确数值型 decimal :精确数值型 money :货币型

smallmoney :货币型 float :近似数值型 real :近似数值型 datetime :日期时间型

Smalldatetime :日期时间型 cursor :特殊数据型 timestamp :特殊数据型

Uniqueidentifier :特殊数据型 char :字符型 varchar :字符型 text :字符型

nchar :统一编码字符型 nvarchar :统一编码字符型 ntext :统一编码字符型 binary :二进制数据类型 varbinary :二进制数据类型 image :二进制数据类型

4.简要介绍数据库表的约束和主要类型、作用 解:

主要四种:

(1)实体完整性约束(每一行反应不同的实体)

通过索引,唯一约束。主键约束或标识属性来体现;

17

(2)域完整性约束(指给定列的输入有效性)

通过限制数据类型,检查约束,输入格式,外键约束,默认值,非空等体现; (3)引用完整性约束(表之间的联系) 通过主外建;

(4)自定义完整性约束(根据用户的需求)

第六章 ORACLE 11g 的数据查询

一、单项选择题

1.ORDER BY的作用是( C )

A. 查询输出分组 B. 设置查询条件 C. 对记录排序 D.限制查询返回的数据行

2.设有一个关系:DEPT(DNO,DNAME),如果要找出倒数第三个字母为W,并且至少包含4个字母的DNAME,则查询条件子句应写成WHERE DNAME LIKE ( B ) A.‘_ _ W _ %’ B.‘_ % W _ _’ C. ‘_ W _ _’ D. ‘_ W _ %’ 3.已知成绩关系如下图所示。 执行SQL语句:

SELECT COUNT(DISTINCT学号) FROM成绩

WHERE分数>60

查询结果中包含的元组数目是( B ) 成绩

18

学号 S1 S1 S2 S2 S3 课程号 C1 C2 C1 C2 C3 分数 80 75 null 55 90 A.1 B.2 C. 3 D. 4

4.基于\学生-选课-课程\数据库中的三个关系:S(S#,SNAME,SEX,AGE), SC(S#,C#,GRADE), C(C#,CNAME,TEACHER),若要求查找选修\数据库技术\这门课程的学生姓名和成绩,将使用关系( D )

A. S和SC B. SC和C C.S和C D.S、SC和C

5.基于\学生-选课-课程\数据库中的三个关系:S(S#,SNAME,SEX,AGE), SC(S#,C#,GRADE), C)(C#,CNAME,TEACHER),若要求查找姓名中第一个字为'王'的学生号和姓名。下面列出的SQL语句中,哪个(些)是正确的?( B ) Ⅰ. SELECT S#,SNAME FROM S WHERE SNAME = ˊ王%ˊ Ⅱ. SELECT S#,SNAME FROM S WHERE SNAME LIKE ˊ王%ˊ Ⅲ. SELECT S#,SNAME FROM S WHERE SNAME LIKE ˊ王_ ˊ A. Ⅰ B.Ⅱ C.Ⅲ D.全部

6.有如下两个关系,其中雇员信息表关系EMP的主键是雇员号,部门信息表关系DEPT的主

EMP

雇员号 001 010 056 DEPT

部门号 01 02 03 部门名 业务部 销售部 服务部 地址 1号楼 2号楼 3号楼 雇员名 张山 王宏达 马林生 部门号 02 01 02 工资 2000 1200 1000 执行如下操作:select a.empno,a.empname,a.deptid,a.salary,b.deptid,b.deptname from emp a right outer join dept b on a.deptid=b.deptid 请问执行结果中有( C )条记录。 A. 1 B. 2 C. 3 D. 4 7.下列函数不属于集函数的是( D )

A.max B. avg C. count D. substring

8.从货物定单数据表(order)中查询出其中定单金额(order_price)在1000和5000之间的定单的

19

详细信息,并按照定单金额(order_price)升序排列。正确的语句是( A )。 A. Select * from order where order_price between 1000 and 5000 order by order_price ASC B. Select * from order where order_price

between 1000 and 5000 order by order_price DESC

C. Select * from order where 1000

A.查询结果的分组条件 B.组的筛选条件 C.限定返回的行的判断条件 D.对结果集进行排序

12.查询一个表的总记录数,可以采用( C )统计函数。 A.AVG(*) B.SUM(*) C.COUNT(*) D.MAX(*) 13.下列涉及空值的操作,不正确的是( C ) A. AGE IS NULL B. AGE IS NOT NULL C. AGE = NULL D. NOT (AGE IS NULL) 二、填空题

1.集合运算符 UNION 实现了集合的并运算,操作INTERSECT实现了对集合的交运算,而 MINUS 则实现了减运算。

2.如果只需要返回匹配的列,则应当使用 INNER JOIN 连接。

3.如果使用逗号分隔连接查看两个表,其中一表有20行,而另一表有50行,如果未使用WHERE子句,则将返回 1000 行。

4.外连接的三种类型是 LEFT JOIN 、 RIGHT JOIN 和 FULL JOIN 。

5. DISTINCT 关键字用来限定检索结果中只显示那些不冗余的数据,该关键字使用在SELECT子句中列的列表前面。

6.在order by子句中, ASC 关键字表示升序排列, DESC 关键字表示降序排列。 7.在连接操作中,如果左表和右表中不满足连接条件的数据都出现在结果中,那么这种连接是 FULL JOIN 。

8.GROUP BY的作用是 实现分组查询 。

9.标准的SQL语言语句类型可分为: 数据操纵语句(DML) 、 数据定义语句(DDL 、 数据控制语句(DCL) 和数据查询语句(DQL). 三、问答题

1. 简要介绍SQL语言的特点。 解:

SQL(Structured Query Language,即结构化查询语言,又简称SQL语言)在关系型数据

20

库中的地位就犹如英语在世界上的地位一样,它是数据库系统的通用语言,,用户可以利用它几乎同样的语句在不同的数据库系统上执行同样的操作。比如“select * from 数据表名”代表要从某个数据表中取出全部数据,在Oracle、SQL Server、Foxpro等关系型数据库中都可以使用这条语句。SQL已经被ANSI(美国国家标准化组织)确定为数据库系统的工业标准。

关系型数据库的主要功能都是通过SQL语言来实现的。一般来说,SQL语言按照功能可以分为4大类: 数据查询语言(DQL)、数据定义语言(DLL)、数据操作语言(DML)和数据控制语言(DCL)。数据查询语言DQL主要用来查询数据,数据定义语言DDL主要用来建立、删除和修改数据对象,数据操纵语言DML主要完成数据操作的命令如插入删除修改数据等操作,数据控制语言DCL主要用来控制对数据库的访问,服务器的关闭、启动等。

SQL语言集DQL、DLL、DML、DCL于一体,可以实现数据库生命同期的全部活动。数据库中的数据可以用SQL语言来进行读取、更新、增加和删除记录。SQL结构比较简单,其命令总数不超过30个,其中常用命令包括:CREATE TABLE、ALTER TABLE、DROP TABLE、INSERT、UPDATE、SELECT、DELETE。SQL语句对大小写不敏感,但其关键词常用大写来表示。

SQL语言简单易学、风格统一,利用简单的几个英语单词的组合就可以完成所有的功能,几乎可以不加修改地嵌入到如VB、PB这样的前端开发平台上,利用前端工具的计算能力和SQL的数据库操纵能力,可以快速建立数据库应用程序。

在SQL语言中访问数据表是通过“用户名.数据表”的形式来进行的。比如在Oracle数据库服务器安装过程中,默认建立有scott用户,该用户对dept数据表和emp数据表有数据查询的权限,因此访问数据表的语句为select * from scott.emp。当然,如果用户是用scott用户本身登录的,则访问数据表的语句可以简化为select * from emp,实质上是一样的。

2. 简要介绍数据库表之间的连接类型及其特点。 解:

连接类型可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

3.设有关系EMP(ENO,ENAME,SALARY,DNO),其中各属性的含义依次为职工号、姓名、工资和所在部门号,以及关系DEPT(DNO,DNAME,MANAGER),其中各属性含义依次为部门号、部门名称、部门经理的职工号。 试用SQL语句完成以下查询:

(1)列出各部门中工资不低于600元的职工的平均工资。 (2)写出“查询001号职工所在部门名称”的查询语句。

21

(3)请用SQL语句将“销售部”的那些工资数额低于600的职工的工资上调10%。 解:

(1) SELECT AVG(SALARY) FROM EMP WHERE SALARY>=600

(2)SELECT B. DNAME FROM EMP A, DEPT B WHERE A. DNO=B. DNO AND A. ENO=?001?

(3)UPDATE A SET A. SALARY=A. SALARY*1.1

FROM EMP A, DEPT B WHERE A. DNO=B. DNO AND B. DNAME =? 销售部? AND A. SALARY<600

4.已知有学生关系S(SNO,SNAME,AGE,DNO),各属性含义依次为学号,姓名、年龄和所在系号;学生选课关系SC(SNO,CNO,SCORE),各属性含义依次为学号、课程号和成绩。 (1)分析以下SQL语句:

SELECT SNO FROM SC WHERE SCORE= (SELECT MAX(SCORE)FROM SC WHERE CNO=’002’) 请问上述语句完成了什么查询操作? (2)试用SQL语句完成如下查询: 按系号列出各系学生的平均成绩。 (3)试用SQL语句完成如下查询:

列出同时选修了001号和002号课程的学生的学号 解:

(1) 读取学生选课关系中成绩为课程号为002的最高成绩的学号。 (2)SELECT DNO,AVG(SCORE) FROM S A,SC B WHERE A.SNO=B.SNO GROUP BY DNO

(3)SELECT SNO FROM S WHERE S.NO IN(SELECT A.SNO FROM SC A,SC B

WHERE A.CNO=001 AND B.CNO=002 AND A.SNO=B.SNO)

5.已知3个表:工程技术人员表emp(sno,sname,sgrade),含义分别为技术人员代号、姓名和技术等级;项目表project(prjno,prjname,sgrade),含义分别为项目代号,项目名称,项目所需的技术等级;项目日报酬表pay(sno,prjno,daypay),含义分别为技术人员代号,项目代号,项目日报酬。要求技术人员只能参加低于其技术等级的项目。

(1)请查询出技术等级大于2的项目代号和项目名称,同时按项目等级降序排序。 (2)请查询出工程技术人员姓名为“张三”,项目代号为“A001”的项目日报酬。 (3)请查询出可以参加编号为“A001”的项目的工程技术人员代号和姓名。

(4)请查询出姓名为“张三”的工程技术人员可以参加的项目代号和项目名称。 解:

(1)SELECT prjno,prjname FROM project WHERE sgrade>2 ORDER BY prjname DESC

22

(2)SELECT daypay FROM emp A, pay B WHERE A. sno=B. sno AND sname=? 张三? AND prjno=? A001?

(3)SELECT sno,sname FROM emp A, pay B WHERE A. sno=B. sno AND prjno=? A001?

(4)SELECT C.prjno,prjname FROM emp A, pay B, project C WHERE A. sno=B. sno AND B. prjno=C. prjno AND sname=? 张三?

第七章 ORACLE 数据的基本操作

一、单项选择题

1. 下列中哪个不是DML命令?( B )

A.Insert B.Create C.Update D.Delete

2.假设on delete cascade选项没有被定义约束,什么是潜在的外部键约束影响在delete声明?( B )

A.外部键约束能防止删除行如果删除行违反外部键中定义的关系的话 B.外部键约束确保在删除行之前对数据表有正确的权限 C.如果只有一行的被删除,该外部键约束将被忽略 D.外部键对删除表述没有影响

3.用来插入数据记录的工具是( D )。

A.SQLPLUS B.DBCA C.SYSCONFIG D.DBMS

4.有如下两个关系,其中雇员信息表关系EMP的主键是雇员号,部门信息表关系DEPT的主键是部门号。

23

EMP

雇员号 001 010 056 101 DEPT

部门号 01 02 03 04 部门名 业务部 销售部 服务部 财务部 地址 1号楼 2号楼 3号楼 4号楼 雇员名 张山 王宏达 马林生 赵敏 部门号 02 01 02 04 工资 2000 1200 1000 1500 若执行下面列出的操作,哪个操作不能成功执行( C )。 A. 从DEPT中删除部门号=‘03’的行 B. 在DEPT中插入行(‘06’,‘计划部’,‘6号楼’) C. 将DEPT中部门号=‘02’的部门号改为‘10’ D. 将DEPT中部门号=‘01’的地址改为‘5号楼’

5.SQL语言集数据查询、数据操作、数据定义和数据控制功能于一体,语句INSERT、DELETE、UPDATE实现哪类功能( B )。

A.数据查询 B.数据操纵 C.数据定义 D.数据控制 6.若用如下的SQL语句创建了一个表S: CREATE TABLE S(S# CHAR(6) NOT NULL, SNAME CHAR(8) NOT NULL,SEX CHAR(2),AGE INTEGER) 今向S表插入如下行时,( B )可以被插入。 A. (‘991001’,‘李明芳’,女,‘23’)` B. (‘990746’,‘张为’,NULL,NULL) C. (,‘陈道一’,‘男’,32) D. (‘992345’,NULL,‘女’,25)

7.用于删除表中所有数据行的命令是( B )

A. DELETE TABLE B. TRUNCATE TABLE C. DROP TABLE D. ALTER TABLE 8.假设ABC中的所有列均为字符数据类型,A列的默认值为“VA”,同时还有B列和C列,则执行以下SQL语句:INSERT ABC(A,C)VALUES(‘V’,‘NULL’)后,下列的说法哪一项正确( A )。

A.插入B列的值为字符‘NULL’ B.插入A列的值为字符VA C.插入B列的值空值 D.插入C列的值空值

9.如果要设置SQL*PLUS每页打印的数值,则可以使用如下哪个命令( C ) A.SET PAGE B.PAGESIZE C.SET PAGESIZE D.SIZE 10.用来插入数据的命令是( ),用于更新的命令是( )。( A ) A.INSERT,UPDATE B.UPDATE,INSERT

C.DELETE,UPDATE D.CREATE,INSERT INTO

24

11.在创建序列的过程中,下列( A )选项指定序列在达到最大值或最小值后,将继续从头开始生成值。

A. Cycle B. Nocycle C. Cache D. Nocache 二、填空题

1. 序列 是一种可被多个用户使用的用于产生一系列唯一数字的数据库对象。尤其适合多用户环境中,可以生成唯一的序列号而没有磁盘I/O或事务处理锁定开销。 2.序列包含的两个伪列是 Currval 和 Nextval 。

3.使用 序列 可以生成一列整数值,这些整数值可以用作主键约束。

4.数据操作语言允许用户对数据库中的数据进行查询、插入、更新和删除等操作,相应的命令是 SELECT 、 INSERT 、 UPDATE 和 DELETE 等。

5.一般情况下,merge语句包括了两个数据操纵命令,如果合并条件成立则执行 UPDATE 命令,如果合并条件不成立则执行 INSERT 命令。

6.如果确定要删除一个大表的全部记录,可以执行 TRUNCATE 命令,它可以释放占有的数据块表空间。

7. 要设置SQL*PLUS显示数字时的格式可以使用 NumFormat 命令,而要设置某个数字列的显示格式要使用 Column 命令。

8.使用 SAVE 命令可以将缓冲区中的SQL命令保存到一个文件中,并且可以使用 START 命令运行该文件。

9.当设置多个列的显示属性后,如果清除设置的显示属性,可以使用命令 CLEAR , 当要清除某列具体的显示属性时,需要使用命令 OFF 。

10.如果需要向表中插入一批已经存在的数据,可以在INSERT语句中使用 SELECT 语句。 11.用SELECT进行模糊查询时,可以使用_ 通配符 _或__百分号_匹配符,模糊查询只能针对字段类型是_字符__的查询。

12.下面语句创建一个序列对象,该序列对象的开始数为2,每次递增2,当大于1000后,序列值重新返回到2,在空白处填写适当的代码,完成上述要求。 create sequence seg_test _start with 2_________ _ increment by 2______ _ maxvalue 1000______ cycle_ _。

三、问答题

1.简述DELETE语句与TRUNCATE语句的差异。 解:

如果想要删除表的所有数据,truncate语句要比 delete 语句快。因为 truncate 删除了表,然后根据表结构重新建立它,而 delete 删除的是记录,并没有尝试去修改表。这也是为什么当向一个使用 delete 清空的表插入数据时,数据库会记住前面产生的AUTOINCREMENT序列,并且继续利用它对AUTOINCREMENT字段编号。而truncate删除表后,表是从1开始为autoincrement字段编号。

25

不过truncate命令快规快,却不像delete命令那样对事务处理是安全的。因此,如果我们想要执行truncate删除的表正在进行事务处理,这个命令就会产生退出并产生错误信息。

2.有如下两个关系,其中雇员信息表关系EMP的主键是雇员号,部门信息表关系DEPT的主键是部门号。 EMP

雇员号(EMPNO) 雇员名(EMPNAME) 部门号(DEPTID) 001 010 056 101 DEPT

部门号(DEPTID) 01 02 03 04 部门名(DEPTNAME) 业务部 销售部 服务部 财务部 地址(ADDRESS) 1号楼 2号楼 3号楼 4号楼 张山 王宏达 马林生 赵敏 02 01 02 04 工资(SALARY) 2000 1200 1000 1500 向表插入雇员号为“100”,雇员名为“李四”,部门号为“02”的雇员信息

更新雇员号为“100”的薪水为2000 将薪水低于1200的雇员薪水加300元 删除部门号为“04”的部门

执行语句INSERT EMP VALUES(?020?,?王五?,?05?)会出现什么错误? 如何实现将部门号为“01”的部门删除? 解:

(1)DEPT表中的部门号(DEPTID)没有“05”的数据,外键部门号(DEPTID)的限制所致。 (2)先删除表EMP中部门号为“01”的数据。

3.已知一个员工表TBEmp,包含以下字段 列名称 id name sex birthday memo 数据类型 varchar2(10) varchar2(2) varchar2(10) date varchar2(100) 备注 代表员工号码,主键 代表员工名字,非空 代表员工性别 代表出生日期 代表员工备注 (1)创建员工表TBEmp

(2)增加一个字段salary,类型 number (3)删除表的memo字段

(4)把name字段长度改为100

(5) 插入以下数据(‘001’,‘陈四’,‘男’,‘1980-10-20’,NULL)

26

(6)查询有工资的员工信息

(7)查询名字中没有ac的员工姓名和出生日期 (8)查询工资在900到2300之间的员工信息 (9)查询女员工个数(性别为female的) (10)查询拿最高工资的员工信息

(11)按照员工年龄由高到低来排序,显示员工号码、姓名、出生日期(使用to_char函数,日期按照年/月/日时:分显示) to_char(birthday,?yyyy/mm/dd hh:mi:ss?) (12)将Jack的出生日期修改为1977-2-1,工资增加200元 (13)更新表格,在所有员工的号码后面加上?emp? (14)删除号码是e001和e002和e003的员工

(15)将员工的id和姓名连接起来使用别名newname来显示(语法select … as …from ..) (16)取出员工姓名的前三个字符、第三个字符、姓名长度 (17)使用create table… as …来创建tbemp的备份表格tbemp2 (18)使用两种方式删除所有员工 (19)删除TBEmp表格 解:(1)create table TBEmp

( id varchar2(10) not null PRIMARY KEY, name varchar2(2) not null, sex varchar2(10), birthday date,

memo varchar2(100));

comment on column TBEmp.id is 员工号''; comment on column TBEmp.name is '员工名称'; comment on column TBEmp.sex is '员工性别';

comment on column TBEmp.birthday is '出生日期'; comment on column TBEmp.memo is '员工备注'; (2)alter table TBEmp add SALARY number; (3)alter table TBEmp drop column memo;

(4)alter table TBEmp modify name varchar2(100); (5)INSERT INTO TBEmp(id,name,sex, birthday) VALUES(‘001’,‘陈四’,‘男’,‘1980-10-20’)

(6)SELECT * FROM TBEmp WHERE SALARY IS NOT NULL (7)SELECT name, birthday FROM TBEmp WHERE name NOT IN (SELECT name FROM TBEmp WHERE NAME LIKE ‘?%’)

(8)SELECT * FROM TBEmp WHERE SALARY BETWEEN 900 AND 2300 (9)SELECT COUNT(1) FROM TBEmp WHRE sex =’ female’

(10)SELECT * FROM TBEmp WHRE ID IN (SELECT ID FROM TBEmp WHERE SALARY =(SELECT MAX(SALARY) FROM TBEmp)) (11)SELECT id,name, birthday FROM TBEmp ORDER BY to_char(birthday,?yyyy/mm/dd hh:mi:ss?)

27

DESC

(12)UPDATE TBEmp SET birthday=? 1977-2-1?, SALARY= SALARY+200 WHERE name=? Jack?

(13)UPDATE TBEmp SET id=id+’emp’

(14)DELETE TBEmp WHERE id IN (‘e001?,?e002?,?e003’) (15)SELECT id+name AS newname FROM TBEmp

(16)SELECT SUBSTR(name,1,3),SUBSTR(name,3,1),LEN(name) FROM TBEmp (17)CREATE TABLE tbemp2 AS SELECT * FROM tbemp (18)DELETE TBEmp; TRUNCATE TABLE TBEmp (19)DROP TABLE TBEmp

第八章 索引

一、单项选择题

1.下面有关索引的描述正确的是( B )

A.不可以在多个列上创建复合索引。 B.可以在多个列上创建复合索引。 C.索引列中的数据不能重复出现。 D.索引列中的数据必须是数值型。

2.如果创建的表其主键可以自动编号,则应该为主键创建的索引是( A )索引。 A.反向索引 B.B树索引 C.位图索引 D.基于函数的索引 3.查看下面语句为( C )索引?

CREATE INDEX test_index ON student(sno,sname) TABLESPACE users STORAGE(INITIAL 64k,next 32k)

A.全局分区索引 B.位图索引 C.复合索引 D.基于函数的索引

4.假设emp表包含一个婚姻状况的字段,则应该在该字段上创建( D )索引。 A.B树唯一索引 B.B树不唯一索引 C. 基于函数的索引 D. 位图索引 5.如果经常执行类似于下面的查询语句SELECT * FROM STUDENT where substr(sname,0,2)=’陈’,应该为STUDENT表的SNAME列创建( C )索引。

A.B树唯一索引 B.B树不唯一索引 C. 基于函数的索引 D. 位图索引

28

6.下面关于约束与索引的说法不正确的是( D )

A.在字段上定义PRIMARY KEY约束时会自动创建B树唯一索引 B.在字段上定义UNIQUE约束时会自动创建一个B树唯一索引

C.默认情况下,禁用约束会删除对应的索引,而激活约束会自动重建相应的索引 D.定义FOREIGN KEY约束时会创建一个B树唯一索引。

7.假设在一个表的3个字段NAME、SEX和BIRTH中分别保存姓名、性别和出生年月数据,则应当为这三个字段分别创建( C )索引。 A.全部创建B树索引 B.全部创建位图索引

C.分别创建B树索引、位图索引和位图索引

D.分别创建B树索引、位图索引和给予函数的索引

8.使用ALTER INDEX?REBUILDER语句不可以执行下面的哪个任务?( C ) A.将反向键索引重建为普通索引 B.将一个索引移动到另一个表空间 C.将位图索引更改为普通索引

D.将一个索引分区移动到另一个表空间 9.关于索引描述不正确的是( B )

A.表是否具有索引不会影响到所使用的SQL的编写方式 B.在为表创建索引后,所有的查询操作都会使用索引 C.为表创建索引后,可以提高查询的执行速度

D.在为表创建索引后,Oracle优化器将根据具体情况决定是否采用索引。 10.列上创组合索引(也称为___B___)是在表的多个建的索引。 A. 压缩索引 B. 连接索引 C. 一致索引 D. 位图索引

二、填空题

1. 索引 对于查询的结果没有任何影响,但能加快对表执行SQL语句的速度,相应地也就提高了获取查询结果的速度。

2.在Oracle的索引类型中,最古老,同时也是最常用的就是 标准B树索引 ,在效率上通常会胜过简单查询。

3.如果表中某列的基数比较低,则应该在该列上创建 位图 索引。

4.如果要获得索引的使用情况,可以通过查询 V$OBJECT_USAGE 视图;而要获知索引的当前状态,可以查询 INDEX_STATS 视图。

5.在B树索引中通过在索引中保存排过序的 索引列值 与相对应记录的 ROWID 来实现快速查找。

6.在Oracle 11g中,可以使用 CREATE INDEX 语句创建索引。 三、问答题

1. 谈谈你对索引的认识? 解:

在关系型数据库中,索引是一种非常重要的模式对象,是一种与表有关的数据库结构,

29

它可以用来快速地寻找那些具有特定值的记录,使对应于表的SQL语句执行得更快。索引的作用相当于图书的目录,例如想要在一本书中找到有关方面的知识时,可以采用两种方法:一种方法是从书的开头向后逐页翻阅,这样需要翻阅全书才能找到所需要的知识内容;另一种方法是从书的目录中查找所需要的知识主题,然后根据目录中的页码找到所需要的知识内容。非常明显,采用第二种方法要比第一种方法查找要快。同样,如果一个表汇总包含很多记录,当没有建立索引,对表进行查询时,第一种方法执行查询时必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。第二种方法通过在表中建立类似于目录的索引,然后在索引中找到符合查询条件的索引值,最后就可以通过保存在索引中的ROWID(相当于页码)快速找到表中对应的记录,而无需扫描任何记录即可迅速得到目标记录所在的位置,这就是索引的作用。如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍。

在Oracle中可以创建多种数据类型的索引,以适应各种表的特点,常用的索引类型有B树索引、反向键索引、位图索引、基于函数的索引、簇索引、全局和局部索引等。

2.使用索引查询一定能提高查询的性能吗?为什么? 解:

通常,通过索引查询数据比全表扫描要快.但是我们也必须注意到它的代价。

索引需要空间来存储,也需要定期维护, 每当有记录在表中增减或索引列被修改时,索引本身也会被修改. 这意味着每条记录的INSERT,DELETE,UPDATE将为此多付出4,5 次的磁盘I/O. 因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢.使用索引查询不一定能提高查询性能,索引范围查询(INDEX RANGE SCAN)适用于两种情况:

(1)基于一个范围的检索,一般查询返回结果集小于表中记录数的30%宜采用; (2)基于非唯一性索引的检索。

索引就是为了提高查询性能而存在的,如果在查询中索引没有提高性能,只能说是用错了索引,或者讲是场合不同

3.ORACLE都有什么索引?分别适用于什么情况? 解:

常用的索引类型有B树索引、反向键索引、位图索引、基于函数的索引、簇索引、全局和局部索引等。

(1)B树索引:适合与大量的增、删、改,不能用包含OR操作符的查询;适合高基数的列(唯一值多),典型的树状结构;每个结点都是数据块;大多都是物理上一层、两层或三层不定,逻辑上三层;叶子块数据是排序的,从左向右递增;在分支块和根块中放的是索引的范围;

(2)反向键索引:建立一个反向索引将把每个列的键值(each column key value)按字节反向过来,对于组合键,列的顺序被保留,但每个列的字节都作了反向。反向键索引有它局限性:如果在WHERE语句中,需要对索引列的值进行范围性的搜索,如BETWEEN、<、>等,其反向键索引无法使用,此时,Oracle将执行全表扫描;只有对反向键索引列进行 <> 和 = 的

30

比较操作时,其反向键索引才会得到使用;

(3)位图索引:适合与决策支持系统;做UPDATE代价非常高;非常适合OR操作符的查询;基数比较少的时候才能建位图索引;

(4)基于函数的索引:基于函数的索引只是常规的B树索引,但它是基于一个应用于表数据的函数,而不是直接放在表中数据本身上的,因此可以把基于函数的索引看成是一个虚拟列上的索引,当然这里的函数可以是系统函数,也可以是用户自定义的函数。

为了在自己的模式中的表上创建基于函数的索引,必须有系统特权QUERY REWRITE;为了在其他模式中的表上创建基于函数的索引,必须有系统特权GLOBAL QUERY REWRITE;

(5)簇索引:用户创建簇必须具有CREATE CLUSTER系统权限,如果想在其他模式中创建簇,还必须具有CREATE ANY CLUSTER系统权限。创建簇之后,用户可以在簇中创建表,也就是簇表(EMP和DEPT表),在将数据行插入簇表之前,还必须创建簇索引;

(6)全局和局部索引:通常在对表进行分区时,也会将对应的索引进行分区,分区索引就是在每个区上单独创建索引,它能自动维护,在drop或truncate某个分区时不影响该索引的其他分区索引的使用。分区的表可以具有未分区的索引,未分区的表可以具有分区的索引,索引与表是相互独立的模式对象,对索引进行分区和对表进行分区目的都是为了更加容易管理与维护。全局索引就是在全表上创建索引,它可以为索引创建自己的分区。局部索引就是在各个分区表上创建的索引。

4.简要介绍数据库中的位图索引和B树索引? 解:

(1)B树索引是Oracle中默认的最常用的索引,缺省条件下建立的索引就是这种类型的索引。B树索引中的B是平衡之意(Balanced),它可以是唯一或非唯一的,可以是单列或多列。B树索引是一对一的,一个索引条目指向一行。B树索引的组织结构类似一个树,由枝干块(branch block)和树叶块(leaf block)组成,枝干块包含了索引列(关键字)和另一索引的地址。树叶块包含了关键字和给表中每个匹配行的ROWID。

(2)位图索引(bitmap index)是从Oracle7.3 版本开始引入的。目前Oracle 企业版和个人版都支持位图索引,但标准版不支持。位图索引是为数据仓库/在线分析查询环境设计的,在此所有查询要求的数据在系统实现时根本不知道。位图索引特别不适用于OLTP 系统,如果系统中的数据会由多个并发会话频繁地更新,这种系统也不适用位图索引。

5.简述反向键索引的工作原理 解:

如果索引列的数据以严格的有序的方式插入,那么B树索引树将变成一棵不对称的\歪树\,如图1所示:

31

图1 不对称的B树索引

我们使用一个传统的B树索引,这些值就可能会放到同一个索引块上,这样就会加剧这一叶子结点块的热块竞争。如果在将数据放在索引中之前,将先把所存储数据的字节反转,这样原本可能在索引中相邻放置的值在字节反转之后就会相距很远,通过反转字节,对索引的插入的数据就会放在多个块上,如1000,10001,10011,10111,1100经过反向后的值将是0001,1001,1101,0011。经过位反向处理的有序数据变得比较随机了,这样所得到的索引树就比较对称,从而提高表的查询性能,如图2所示:

图2 对称的B-Tree索引

比较图1和图2,在图1中搜索到A块需要进行5次I/O操作,而图 2仅需要3次I/O操

作。

建立一个反向索引将把每个列的键值(each column key value)按字节反向过来,对于组合键,列的顺序被保留,但每个列的字节都作了反向。反向键索引有它局限性:如果在WHERE语句中,需要对索引列的值进行范围性的搜索,如BETWEEN、<、>等,其反向键索引无法使用,此时,Oracle将执行全表扫描;只有对反向键索引列进行 <> 和 = 的比较操作时,其反向键索引才会得到使用。

32

第九章 视图

一、单项选择题

1.视图定义是( D ) A.一个基表中导出的基表 B.一个基表中导出的虚表

C.一个或几个基表或视图中导出的基表 D.一个或几个基表或视图中导出的虚表 2.在视图上不能完成的操作是( C ) A.更新视图 B.查询

C.在视图上定义新的基本表 D.在视图上定义新视图

3.在基本SQL语言中,不可以实现( D ) A.定义视图 B.定义基表 C.查询视图和基表 D.并发控制

4.下列关于关系数据库视图的说法中,哪些是正确的?( A ) Ⅰ. 视图是关系数据库三级模式中的内模式。 Ⅱ. 视图能够对机密数据库提供一定的安全保护。 Ⅲ. 视图对重构数据库提供了一定程度的逻辑独立性。

33

Ⅳ. 对视图的一切操作最终都要转换为对基本表的操作。 Ⅴ. 所有的视图都是可以更新的。

A.Ⅰ、Ⅱ和Ⅲ B. Ⅱ、Ⅲ和Ⅳ C. Ⅱ、Ⅲ、Ⅳ和Ⅴ D. 都正确

5.下列模式对象不会占用实际的存储空间是( D ) A.表 B.索引 C.蔟 D.视图

6.查看视图中哪些字段可以更新应查询( D )视图 A.DBA_VIEWS B. DBA_CLU_COLUMNS C. DBA_OBJJECTS D.DBA_UPDATABLE _COLUMN

7. 在SQL Sever 2000中,以下关于视图数据的操作,正确的描述是( C )。 A.视图数据只能用来查询和浏览,不能进行修改、插入和删除 B.可以修改和删除视图的数据,但是这些数据不更新到数据库表中

C.可以在查询分析器中使用INSERT/UPDATE/DELETE 等SQL语句对视图进行操作

D.由于视图是数据库基表数据的复制,因此删除视图中数据行,不会影响到基表的数据。 8. 现有创建视图语句

create view view_stuinfo(姓名, 学号, 成绩) As

select stuname, stuinfo.stuid, score from stuinfo left join stumarks on stuinfo.stuid=stumarks.stuid go

下列评述正确的是( A )

A. 成功创建了一个名为view_stuinfo的视图 B. 语法错误:第一行的列名不能这样指定 C.语法错误:as应改为begin

D.语法错误:视图中不能出现左连接关键字left join 二、填空题

1. 视图 是一个表示表的数据的数据库对象,它允许用户从一个表或一组表中通过一定的查询语句建立一个“虚表”。 2.可以通过在SQL*PIUS中查询Oracle数据库字典的动态视图是 V$NLS-PARAMETERS 。 3. DBA_DATA_FILES 视图用来检查数据文件的大小, DBA_FREE_SPACE 视图用来判断tablespace的剩余空间。

4.当对视图进行UPDATE、INSERT和DELETE操作时,为了保证被操作的行满足视图定义中子查询语句的谓词条件,应在视图定义语句中使用可选择项 WITH CHECK OPTION 。 5.在不为视图指定列名的情况下,视图列的名称将使用 表列的名称 。 三、问答题

1.什么是视图?视图有什么作用? 解:

视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改。

34

对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。分布式查询也可用于定义使用多个异类源数据的视图。如果有几台不同的服务器分别存储组织中不同地区的数据,而您需要将这些服务器上相似结构的数据组合起来,这种方式就很有用。

2.比较表和视图二者之间的异同 解:

视图中没有数据,仅仅是一条SQL语句,查询语句检索出来的数据以表的形式表示;视图的定义存储在数据字典中,视图的查询基于表;视图没有直接的相关物理数据,不能像表那样被索引。

3.举例说明WITH CHECK OPTION的作用 解:

首先创建表students

create table students (

sid number(6) not null unique, sname varchar2(20) , sage varchar2(10) );

insert into students values(1,'yangliehui','21'); insert into students values(2,'zhangsan','22');

然后创建视图view_student

create view view_student as select * from students where sid='2'; 再创建视图view_student_check

create view view_student_check as select * from students where sid=2 with check option;

比较view_student 和 view_student_check 的区别:

view_student视图可以执行 insert into view_student_sele values(3,'lisi','30'); view_student_check视图执行insert into view_student_sele values(3,'lisi','30');时显示“视图WITH CHECK OPTION where 子句违规”。

同理:update 、delete 操作也是如此,说明:视图加上with check option 子句后对该视图进行插入、修改、删除操作时,DBMS会自动加上条件(在本例中加的条件是:sid=2)。

4.创建一个视图时,使用SELECT语句如下:SELECT COUNT(*) FROM 商品信息,为什么不能更新这个视图?如何查看该试图是否可以更新?

35

解:

(1)表商品信息无COUNT(*)对应的字段。

(2)视图的更新能唯一地有意义地转换成对相应基本表的就可以更新。

5.根据下列模式: S(S#,SN,SA,SG) C(C#,CN,PC#) SC(S#,C#,G)

其中S,C,SC分别代表学生,课程及学生-课程。S#,SN,SA,SG,C#,CN,PC#, G分别表示学号,学生姓名,年龄,系别,课程号,课程名,预修课号,成绩等,以上述模式为基础做一个视图VSC(S#,SN,SA),该视图表示计算机系学生的视图。 解:

CREATE VIEW AS VSC(S#,SN,SA) SELECT A.S#,SN,SA FROM S A,C B,SC C

WHERE A.S#=C.S# AND B.C#=C.C# AND PC#=’计算机’

36

第十章 PL/SQL基础

一、单项选择题

1.PL/SQL最早出现的Oracle版本是( C )

A.Oracle 1 B.Oracle 7 C.Oracle 6 D.Oracle 9i 2.在PL/SQL中,下列( D )变量名合法。 A.1VAR B.?var_ab C.$ABC D.ROS$$_1 3.只能存储一个值的变量是( B )

A.游标 B.标量变量 C.游标变量 D.记录变量 4.PL/SQL语言的基本逻辑结构不包括( A )。

A.模块 B.顺序 C.选择 D.循环 5.在以下的表的显示结果中,以下语句的执行结果是 SQL> select * from usertable; USERID USERNAME

----------- ---------------- 1 user1 2 user2 3 user3 4 user4 5 user5

SQL> select * from usergrade; USERNAME GRADE ---------------- ----------

37

user9 90 user8 80 user7 80 user2 90 user1 100 user1 80 执行语句

语句一: Select count(*) from usertable t1 where username in (select username from usergrade t2 where rownum <=1);

语句二: Select count(*) from usertable t1 where exists (select 'x' from usergrade t2 where t1.username=t2.username and rownum <=1);

以上语句一的执行结果是: ( A ) , 以上语句二的执行结果是: ( C ) A. 0 B. 1 C.2 D. 3

6.下列哪个语句允许检查UPDATE语句所影响的行数?( B ) A.SQL%FOUND B.SQL%ROWCOUNT C.SQL%COUNT D.SQL%NOTFOUND 7.下列哪一项可以正确地引用记录变量的值?( B )

A.rec_abc(1) B.rec_abc(1).col C.rec_abc.col D.rec_abc.first(); 8.声明%TYPE类型的变量时,服务器将会做什么操作?( A ) A.为该变量检索数据库列的数据类型 B.复制一个变量

C.检索数据库中的数据 D.为该变量检索列的数据类型和值 9.如何终止LOOP循环,而不会出现死循环?( D ) A.在LOOP语句中的条件为FALSE时停止。 B.这种循环限定的次数,它会自动终止循环。 C.EXIT WHEN语句中的条件为TRUE D.EXIT WHEN语句中的条件为FALSE 10. 有一段PL/SQL程序如下所示: var1 := 10; LOOP

EXIT WHEN var1 > 12; var1 := var1 +1;

DBMS_OUTPUT.PUT_LINE(?A?); END LOOP;

输出为( C )。 A. A

B. A A C. A A D . A A

38

A

11.DBMS_LOB数据包提供的( D ),返回LOB值的长度。 A. LENGTH B.SUBSTR C.INSTR D.GETLENGTH

12.PL/SQL为内存耗尽时,预定义了( C )异常。 A.NO_DATA_FOUND B.MEMORY_ERROR C.STORAGE_ERROR D.NO_MEMEORY_FOUND

13.在PL/SQL中,在执行任何DML语句前,SQL%NOTFOUND的值为( C )。(选择一项) A. NOTFOUND B. TRUE C. NULL D. FALSE 二、填空题

1.PL/SQL程序块主要包含3个主要部分:声明部分、可执行部分和 异常处理 部分。 2.使用显式游标主要有4个步骤:声明游标、 打开游标 、检索数据、 关闭游标 。 3.你刚刚编译了一个PL/SQL Package但是有错误报道,使用 SHOW ERRORS 命令显示出错信息?

4.查看下面程序块,DBMS_OUTPUT将显示什么结果? N 。 DECLARE

var_a CHAR(1):=’N’; BEGIN DECLARE

var_a CHAR(2); BEGIN

Var_a:=’Y’; END;

DBMA_OUTPUT.put_line(var_a); END;

5.查看下面程序块,其中变量Var2的结果是 5 。 DECLARE

var1 number:=1000; Var2 number; BEGIN

IF var1>500 THEN Var2:=5;

ELSEIF var1>1000 THEN Var2:=10; ELSE

Var2:=15; END IF; END;

6.自定义异常必须使用 RAISE 语句引发。 三、问答题

39

1. PL/SQL提供了哪些循环结构?举例说明 解:

1))LOOP语句格式: LOOP

执行语句;

EXIT WHEN expression1; END LOOP; eg:

--从1加到100 declare

v_i number := 1; v_Sum number := 0; begin

loop

v_Sum := v_Sum + v_i; v_i := v_i + 1;

exit when v_i > 100; end loop;

DBMS_OUTPUT.PUT_LINE(v_Sum); end;

2))WHILE语句格式:

while (condition expression) loop 执行语句; end loop; eg:

--从1加到100 declare

v_i int := 1; v_sum int := 0; begin

while (v_i < 101) loop v_sum := v_sum + v_i; v_i := v_i + 1; end loop;

dbms_output.put_line(v_sum); exception

when others then

dbms_output.put_line('ERROR!');

40

end;

3))FOR语句格式:

for 计数器 in 低值..高值 loop 执行语句; end loop; eg:

--从1加到100 declare

v_I int := 1; v_Sum int := 0; begin

for v_I in 1..100 loop v_Sum := v_Sum + v_I; end loop;

dbms_output.put_line(v_Sum); exception

when others then

dbms_output.put_line('error!'); end;

4))case语句格式: 1)))语法一:

CASE search_expression

WHEN expression1 THEN result1 WHEN expression2 THEN result2 ...

WHEN expressionN THEN resultN ELSE default_result END eg:

select scott.emp.empno, scott.emp.ename, case scott.emp.empno when 7369 then 'aa' when 7499 then 'bb' when 7521 then 'cc' when 7566 then 'dd' when 7654 then 'ee' else 'ff'

end A --新字段名称 from scott.emp

41

2)))语法二: CASE

WHEN condition1 THEN result1 WHEN condition2 THEN result2 ...

WHEN conditionN THEN resultN ELSE default_result END eg:

select scott.emp.empno, scott.emp.ename, case

when scott.emp.empno=7369 then 'aa' when scott.emp.empno=7499 then 'bb' when scott.emp.empno=7521 then 'cc' when scott.emp.empno=7566 then 'dd' when scott.emp.empno=7654 then 'ee' else 'ff'

end A --新字段名称 from scott.emp

2.关键字%TYPE和%ROWTYPE的含义和作用是什么? 解:

(1)%type:

如果声明的变量是直接映射到数据库的某一列上,那么就可以使用%type关键字将变量锚定到这个列上。

比如:declare v_ename scott.emp.ename%type; 当数据类型发生变化时,此方法显得非常灵活。

如果更改了列的长度,那么锚定到该列上的所有变量都会自动更改其长度;

假设我们将v_ename定义为varchar2(10),那么当emp表中的ename列发生变化时, 我们得手动将v_enam更改为emp.ename相同的数据长度; 当我们使用锚定类型后,变量就会自动进行调整。 (2)%rowtype:

%rowtype与%type相似;不过它将变量锚定到表的所有列,而不是锚定到某一列;

3.如何处理用户自定义的异常? 解:

使用RAISE_APPLICATION_ERROR 函数,该函数是将应用程序专有的错误从服务器端转达到客户端应用程序(其他机器上的SQLPLUS或者前台开发语言)。

42

第十一章 存储过程与函数

一、单项选择题

1.存储过程保存在( B )中。

A.系统表 B.数据库 C.内存 D.数据表

2.下列哪个语句可以在SQL*PLUS中直接调用一个过程?( D ) A.RETURN B.CALL C.SET D.EXEC

3.下面哪些不是过程中参数的有效模式?( C ) A.IN B.IN OUT C.OUT IN D.OUT

4.如果存在一个名为TEST的过程,它包括3个参数:第一个参数为P_NUM1,第二个参数为P_NUM2,第三个参数为P_NUM3。3个参数的模式都是IN,P_NUM1参数的数据类型是NUMBER, P_NUM2参数的数据类型是VARCHAR2, P_NUM3参数的数据类型是VARCHAR2,下列哪一个是该过程的有效调用?( D )

A.TEST(1010,P_NUM3>=’abc’,P_num2>=’bcd’) B. TEST(P_NUM1>=1010,P_num2=>’abc’,’bcd’) C.TEST(P_NUM1=>1010,’abc’,’bcd’) D.上述都对

5.函数头部中的RETURN语句的作用是( A ) A.声明返回的数据类型

B.声明返回值的大小和数据类型 C.调用函数

D.函数头部不能使用RETURN语句

6.如果在程序包的主体中包括了一个过程,但没有在程序包规范中声明这个过程,那么它将会被认为是( D )

A.非法的 B.公有的 C.受限的 D.私有的

7.对于下面的函数,哪个语句能成功地调用?( D )

43

CREATE OR REPLACE FUNCTION Calc_Sum(Addend_x number,Addend_Y number) Return number As

Sum number; BEGIN

Sum:=Addend_x+Addend_y; Return Sum; END;

A.Calc_Sum

B.EXECUTE Calc_Sum(45) C.EXECUTE Calc_Sum(23,12) D.Sum:=Calc_Sum(23,12)

8.当满足下列( B )条件时允许两个过程具有相同的名称? A.参数的名称或数量不相同时 B.参数的数量或数据类型不相同时 C.参数的数据类型和名称不相同时 D.参数的数量和数据类型不相同时

9.在FUNCTION主体中,不可能有( A )个RETURN语句。 A.0 B.1 C.2 D.3

10.数据包airline中有函数book_ticket,其定义如下: FUNCTION book_ticket(para1 CHAR)RETURN DATE IS 下列( D )程序段正确地调用该数据包的函数。 A. DECLARE

value1 CHAR(10); BEGIN ----

value1 := airline.book_ticket(10); B. DECLARE

value1 CHAR(10); BEGIN ----

value1 := airline.book_ticket(‘10’); C. DECLARE value1 DATE; BEGIN ----

value1 := airline.book_ticket(10); D. DECLARE value1 DATE;

44

BEGIN ----

value1 := airline.book_ticket(‘10’); 二、填空题

1. 存储过程 是存储在服务器上的一组预编译的Transcat-SQL语句。 2.由于存储过程每次执行时 否 (是,否)都要检查有语法错误

3.程序包包括两个组成部分,即 包头 和 包体 。前者包含了该程序包的信息、过程和函数列表,后者包含实际的代码。

4.如果希望查看过程的有关信息,那么可以使用 USER_SOURCE 数据字典视图。

5.创建和替换存储过程的语句是 CREATE OR REPLACE PROCEDURE ,删除存储过程的语句是 DROP PROCEDURE ,创建和替换函数的语句是 CREATE OR REPLACE FUNCTION ,删除函数的语句是 DROP FUNCTION 。 6.在下面程序的空白处填写一定的代码,使该函数输出0-100的值 clear;

create or replace procedure mydel(in_a in integer) as

a integer; begin a:=0;

while a<100 loop

dbms_output.put_line(a) ; a:=a+1; end loop; end;

7.在下面程序的空白处填写一定的代码,使该函数可以获取指定编号的商品价格。 CREATE O REPLACE FUNCTION get_price (pid varchar2)

RETURN NUMBER IS V_price NUMBER BEGIN

SELECT 单价

INTO V_price

FROM 商品信息 WHERE 商品编号= pid ; RETURN v_price EXCEPTION

WHEN NO_DATA_FOUND THEN

DBMS_OUTPUT.PUT_LINE(?查找的商品不存在!?); WHEN TOO_MANY_ROWS THEN

DBMS_OUTPUT.PUT_LINE(?程序运行错误!请使用游标?);

45

WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE(?发生其他错误!?); END get_price; 三、问答题

1.什么是存储过程,为什么要使用存储过程? 解:

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

(1)存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。

(2)当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query,Delete 时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作,如果用程序来完成,就变成了一条条的 SQL 语句,可能要多次连接数据库。而换成存储,只需要连接一次数据库就可以了。

(3)存储过程可以重复使用,可减少数据库开发人员的工作量。

(4)安全性高,可设定只有某此用户才具有对指定存储过程的使用权。

2.创建存储过程,要求输入员工号,输出该员工的工资 资料(编号、姓名、工资、工作所在地)。 解:

CREATE OR REPLACE PROCEDURE PRO_NAME( in_id IN VARCHAR2,

out_wage OUT VARCHAR2) AS BEGIN

SELECT工资into out_wage FROM资料WHERE编号=in_id; END PRO_NAME;

3.创建一个存储过程P1,要求执行改存储过程能够返回考生数据表(tblkaosheng) 中bmdwdm(报名单位代码)为100,200,500的考生的zkzh(准考证号)、 (xm)姓名和kscj(考试成绩)结果集,并且该结果集要按照bmdwdm(报名单位代码)和准考证号升序排列 解:

CREATE PROCEDURE p1 AS

select zkzh,xm,kscj from tblkaosheng

where bmdwdm in (100,200,500) order by bmdwdm asc, zkzh asc

46

4.创建一个存储过程P2,要求执行改存储过程能够返回考生数据表(tblkaosheng)中所有“陈”姓考生的xm(姓名)、lxdh(联系电话)结果集。 解:

CREATE PROCEDURE p2 AS

select xm,lxdh from tblkaosheng where xm like '陈%

5.Oracle中有以下表User 字段名 字段类型 Id int

Name Varchar2(20) password Varchar2(10)

请在Oracle中编写一个函数getUserByInterval,有参数(int start,int end)分别表示要获取记录的起始和结束位置,返回User表中记录序号从start到end的结果集。(注:这里的记录位置是指该记录在表中存放的位置,而不是id号)。 解:

CREATE OR REPLACE PACKAGE \type mycursor is ref cursor; end;

CREATE OR REPLACE FUNCTION getUserByInterval (v_start integer,v_end integer) return mypackage.mycursor is

myresult mypackage.mycursor; begin

open myresult for

select * from (select rownum r,UserInfo.* from UserInfo where rownum <= v_end) t where t.r >= v_start; return myresult; end;

47

第十二章 触发器

一、单项选择题

1.触发器的类型不包括的是( B )。

A.DML触发器 B.DDL触发器 C.替代触发器 D.系统触发器

2.在SQL语言中,如果要建立一个工资表,包含职工号、姓名、职称、工资等字段。若要保证\工资\字段的取值不低于800元,最合适的实现方法是( C ) A.在创建工资表时为'\工资字段建立缺省(default)

B.在创建工资表时为\工资\字段建立检查约束(check constraint) C.在工资表上建立一个触发器(trigger) D.为工资表数据输入编写一个程序进行控制

3.如果希望执行某个操作时,该操作本身不执行,而是去执行另外的某些操作,那么可以使用什么方式完整这种操作?( A )

A.before 触发器 B.after触发器 C.instead of触发器 D.undo触发器 4.系统事件触发器共支持5种系统事件,下列(B )事件不会激发触发器。 A.更新数据 B.查询数据 C.删除数据 D.插入数据

5.在使用CREATE TRIGGER语句创建行级触发器时,哪一个语句用来引用旧数据?( D ) A. FOR EACH B.ON C.REFERENCING D.OLD

6.在创建触发器时,哪一个语句决定了触发器是针对每一行执行一次,还是针对每一个语句执行一次?( D )

A.FOR EACH B.ON C.REFERENCING D.NEW

7.替代触发器可以被附加到哪一类数据库对象上?( C ) A.表 B.序列 C.视图 D.蔟

8.下列哪个语句用于禁用触发器?( C )

A.ALTER TABLE B.MODIFY TRIGGER C.ALTER TRIGGER D.DROP TRIGGER 9.可以使用哪个语句来更改相关性标识符的名称?( A ) A.REFERENCING B.WHEN C.INSTEAD OF D.RENAME

10.对一个视图myView创建一个触发器mytrigger,语句为( C )。 A.CREATE TRIGGER mytrigger

48

BEFORE

INSERT ON myView BEGIN

B.CREATE TRIGGER mytrigger AFTER

INSERT ON myView BEGIN

C.CREATE TRIGGER mytrigger INSTEAD OF

INSERT ON myView BEGIN

D.以上都不对 二、填空题

1.创建和替换触发器的语句是 CREATE OR REPLACE TRIGGER ,删除触发器的语句是 DROP TRIGGER 。

2.在触发器定义中,可以使用 OLD 引用修改前的数据,使用 NEW 引用新插入的数据。

3.假设有一个表TEST,它仅包含一个字段DATA.现在创建一个触发器,实现将添加的数据变为大写,请在空白处填写适当的语句。 create or replace trigger test_trigger

after INSERT on TEST for each row being

:new.data:=upper( :NEW.DATA ); end;

4. BEFORE 和 AFTER 指定了触发器的触发时间。当为一个表配置了约束时,它们将会特别有用, BEFORE 可以规定Oracle在应用约束前调用触发器,而 AFTER 规定在应用约束后调用触发器。 三、问答题

1.描述一个触发器包括哪几部分及其作用? 解:

触发器主要由触发器名称、触发语句 、触发时间、触发事件、触发级别等组成。

(1)触发器名:触发器对象的名称。由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。

(2)触发时间:指明触发器何时执行,该值可取: BEFORE---表示在数据库动作之前触发器执行; AFTER---表示在数据库动作之后出发器执行。

49

(3)触发事件:指明哪些数据库动作会触发此触发器,具体有: INSERT:数据库插入会触发此触发器; UPDATE:数据库修改会触发此触发器; DELETE:数据库删除会触发此触发器。

2.Oracle 11g有几种触发器,它们的作用是什么? 解:

Oracle主要有三种触发器:DML触发器,instead-of触发器和系统触发器。

(1)DML触发器由DML语句触发,语句的类型确定DML触发器的类型,可以定义为INSERT,UPDATE,DELETE操作,可以在操作之前或之后被触发。

(2)instead-of触发器定义在view上,它允许修改一个本来不可修改的视图。INSTEAD OF 触发器是在视图上而不是在表上定义的触发器,它是用来替换所使用实际语句的触发器。

(3)系统触发器在DDL事件或者数据库事件(比如用户登陆注销,服务器错误等等)上触发。

系统触发器分模式触发器和数据库触发器,模式触发器只有当前的触发事件以指定模式发生时才会触发,可以在模式级的操作上建立触发器,如:create ,alter,drop,grant,revoke 和truncate 等 DDL语句,如果触发器使用ON SCHEMA,该触发器属于模式触发器,如果使用ON DATABASE的话,就不依赖于模式属于数据库触发器,所有的用户都会触发。

3.什么是Oracle的触发器中触发器事件? 解:

触发事件:指明哪些数据库动作会触发此触发器,具体有: INSERT:数据库插入会触发此触发器; UPDATE:数据库修改会触发此触发器; DELETE:数据库删除会触发此触发器。

4.比较触发器与存储过程的异同点。 解:

触发器与存储过程的主要区别在于触发器的运行方式。存储过程必须有用户、应用程序或者触发器来显示的调用并执行,而触发器是当特定时间出现的时候,自动执行或者激活的,与连接用数据库中的用户、或者应用程序无关。当一行被插入、更新或者删除时触发器才执行,同时还取决于触发器是怎样创建的,当UPDATE发生时使用一个更新触发器,当INSERT发生时使用一个插入触发器,当DELETE发生时使用一个删除触发器。

50