描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302505105
本书在内容选取、章节安排、难易程度等方面充分考虑教学的需要,力求使概念准确清晰、重点明确、内容广泛、便于取舍。可作为本科计算机专业、软件学院、高职软件专业及相关专业的教材,也适合Oracle爱好者及初、中级Web程序开发人员参考使用。
第1章Oracle 11g简介11.1Oracle的发展历史11.2Oracle 11g新特性21.3Oracle安装及卸载31.3.1安装Oracle31.3.2Oracle安装及卸载91.4Oracle数据库启动与关闭111.4.1启动数据库111.4.2关闭数据库13第2章Oracle体系结构152.1物理结构152.1.1数据文件152.1.2日志文件152.1.3控制文件162.2逻辑结构162.2.1数据块162.2.2区间182.2.3段182.2.4表空间18第3章参数文件与实例203.1参数文件203.1.1参数文件的定义和作用203.1.2参数文件分类203.1.3参数文件的读取213.2实例213.2.1内存结构213.2.2后台进程23第4章SQLPlus命令254.1环境设置命令254.1.1set命令254.1.2show命令264.2用SQLPlus生成报表274.2.1设置标题: ttitle和btitle284.2.2设置报表尺寸304.2.3设置列column30第5章SQL语句基础335.1SQL语言简介335.1.1SQL语言的优点335.1.2SQL与SQLPlus、PL/SQL的区别335.1.3SQL的常用术语345.1.4SQL语言的组成345.2SQL语言的数据类型345.3管理表355.3.1定义基本表355.3.2修改表结构365.3.3删除基本表375.3.4插入数据语句375.4数据查询语句385.4.1简单查询,只有必须的查询子句385.4.2条件查询395.4.3排序结果表405.4.4聚集函数415.5数据更新语句435.5.1插入435.5.2删除435.5.3修改44第6章PL/SQL编程基础456.1PL/SQL程序设计456.1.1什么是PL/SQL456.1.2PL/SQL的好处456.1.3PL/SQL可用的SQL语句456.1.4运行PL/SQL程序466.2PL/SQL块结构和组成元素466.2.1PL/SQL块466.2.2PL/SQL结构476.2.3标识符476.2.4PL/SQL变量类型476.2.5运算符496.2.6变量赋值506.2.7注释516.3PL/SQL流程控制语句526.3.1条件语句526.3.2case表达式536.3.3循环536.3.4标号和goto556.4游标的使用556.4.1游标概念556.4.2处理显式游标566.4.3处理隐式游标586.4.4游标修改和删除操作58第7章函数、过程、包和触发器607.1函数607.1.1创建函数607.1.2函数的调用617.1.3参数默认值617.2存储过程627.2.1建立存储过程627.2.2调用存储过程637.3包的创建和应用637.3.1包的定义647.3.2删除过程、函数和包677.4触发器687.4.1触发器类型687.4.2创建触发器687.4.3触发器触发次序697.4.4创建DML触发器697.4.5删除触发器70第8章表对象718.1表的概念718.2创建表718.3表的完整性约束728.3.1非空约束728.3.2主键约束738.3.3外键约束748.3.4唯一约束758.3.5条件约束768.3.6删除约束768.4修改表768.4.1修改表的状态768.4.2修改字段 778.4.3修改表名798.5删除表79第9章数据对象809.1索引809.1.1创建索引809.1.2修改索引819.1.3删除索引819.1.4查看索引829.2簇829.2.1管理簇的准则829.2.2创建簇839.2.3更改簇849.2.4删除簇849.3视图859.3.1视图的概念859.3.2视图的创建与查询869.3.3管理视图879.4序列889.4.1创建序列889.4.2管理序列899.5同义词90第10章管理控制文件和日志文件9310.1管理控制文件9310.1.1控制文件的管理9310.1.2创建控制文件9410.1.3添加、重命名或移动控制文件9610.1.4备份控制文件9610.1.5删除控制文件9610.1.6控制文件的数据字典视图9610.2重做日志文件9710.2.1设置重做日志文件9810.2.2创建重做日志文件组和日志文件成员9810.2.3重命名、移动日志文件成员10010.2.4强制重做日志切换10110.2.5清除重做日志文件10210.2.6删除重做日志文件组和日志文件成员10210.2.7重做日志文件的数据字典视图10410.3归档日志文件10510.3.1归档模式和非归档模式的选择10510.3.2归档模式的管理10510.3.3归档目的地管理10710.3.4归档日志文件的常用信息查询11110.3.5检查点11310.3.6快速恢复区114第11章管理表空间和数据文件11711.1表空间类型11711.1.1本地管理表空间11711.1.2自动段管理11911.1.3手动段管理11911.1.4Oracle数据库中的表空间分类12111.2表空间以及数据文件的脱机和联机12511.3用户表空间以及数据文件的维护12911.4只读表空间139第12章用户的安全设置14312.1用户账户的安全性管理14312.1.1用户身份认证方式14312.1.2用户密码的安全性管理14512.1.3用户账户的资源限制15312.1.4用户默认表空间和使用配额15712.2权限与角色15912.2.1系统权限16112.2.2用户角色16612.2.3对象权限171第13章数据导入与导出17513.1传统的数据导入导出工具exp/imp17513.1.1exp/imp的使用前提17513.1.2exp/imp的执行方式17613.1.3exp/imp的参数17813.2数据泵导入导出工具expdp/impdp18113.2.1expdp/impdp的使用前提18113.2.2expdp/impdp的执行方式18213.2.3expdp/impdp的参数18813.3数据加载工具SQLLoader19013.4外部表192第14章备份和恢复19514.1数据库备份与恢复的种类19514.2冷备份19614.2.1冷备份操作步骤19614.2.2备份完整实例19614.2.3冷恢复19914.3热备份20114.3.1热备份的步骤20114.3.2热备份的实例20214.3.3热备份的恢复20514.3.4数据库运行时数据文件破环的数据库恢复20614.3.5数据库关闭时数据文件破环的数据库恢复20914.3.6关闭数据库状态下的数据库恢复212第15章数据库闪回和审计技术21515.1数据库闪回概述21515.1.1闪回配置21615.1.2查询闪回21615.1.3表闪回21815.1.4删除闪回22015.1.5数据库闪回22215.1.6闪回版本查询22515.1.7闪回事务查询22715.1.8闪回数据归档22915.2数据库审计23015.2.1审计概述23015.2.2审计的分类23015.2.3审计的设置23115.2.4语句审计23215.2.5权限审计23615.2.6对象审计23715.2.7细粒度审计24015.2.8细粒度审计策略的管理24315.2.9细粒度审计数据字典视图244第16章Oracle图形管理工具24516.1Oracle企业管理器 24516.1.1数据库性能24516.1.2数据表的管理24716.1.3表空间与数据文件25316.1.4用户管理25516.1.5权限管理25916.1.6角色管理26216.1.7备份26616.1.8恢复26916.1.9数据泵27316.2Oracle SQL Developer281第17章项目实战——小型超市管理系统28817.1任务与要求28817.1.1任务描述28817.1.2设计要求 28817.2需求分析28917.2.1数据需求28917.2.2事务需求28917.3概要设计28917.4逻辑设计29017.5物理设计29217.6数据库建立29217.6.1创建数据表29217.6.2数据初始化29417.7数据库用户权限管理29617.7.1用户权限类型29617.7.2触发器296参考文献299
前言Oracle数据库系统是美国Oracle(甲骨文)公司提供的以分布式数据库为核心的一组软件产品,是目前应用最广泛的数据库管理系统。作为一个通用的数据库管理系统,它的系统可移植性好、使用方便、功能强,适用于各类大、中、小、微计算机环境,是一种高效率、高可靠性的适应高吞吐量的数据库解决方案。Oracle已拥有众多的用户,也是大学数据库技术类课程的首选内容。 目前在高校教学中介绍数据库原理与技术的教材比较多,本书是作者在长期从事数据库课程教学和科研的基础上,为满足“数据库原理及应用”课程的教学需求而编写,内容循序渐进、深入浅出、系统全面。读者可以充分利用Oracle平台来深刻理解并掌握数据库概念及原理,充分掌握数据库应用技术,利用Oracle开发工具进行数据库应用系统的初步设计与开发,达到理论联系实际、提高解决问题能力的教学目的与教学效果。本书由李然、王芳、藤琳、孙庚编写,李然任主编。其中李然编写第10~第17章及第1章的1.3节和1.4节;王芳编写第2和第3章及第1章的1.1节和1.2节;藤琳编写第4~第6章;孙庚编写第7~第9章。全书由李然统稿。学生杜心雨参与了部分程序的调试。本书在编写过程中参阅了大量的参考书目和文献资料,本书的出版得到了清华大学出版社的大力支持,责任编辑张玥为本书付出了辛勤的劳动,在此一并表示衷心的感谢。由于编者水平有限,书中难免有不足之处,敬请读者批评指正。编者的邮箱是[email protected]。
编者于大连海洋大学2017年10月
3.1参数文件〖*4/5〗3.1.1参数文件的定义和作用参数文件指定了数据库和实例的名字、内存组件的大小和构成、控制文件的位置、强制和非强制进程的相关设置等信息。Oracle数据库启动时,读取参数文件并根据参数文件中的参数设置来配置数据库。例如: maxlogfiles=45background_dump_dest=c:/dump其中,等号左边是参数名,右边是对应的参数值,值的类型有多种,典型的如数字和字符串。参数文件就是存储这些参数的地方。3.1.2参数文件分类在9i之前参数文件只有一种,它是文本格式的,称为pfile,在9i及以后的版本中新增了服务器参数文件,称为spfile,它是二进制格式的。这两种参数文件都是用来存储参数配置以供Oracle读取的。对二者的说明如下: (1) pfile是文本文件,spfile是二进制文件。(2) 可直接使用任何文本编辑器打开pfile对其中的参数进行配置,而spfile文件中的参数则必须在数据库启动后,通过SQL命令进行在线修改。无法通过SQL命令对pfile进行修改。(3) pfile是静态参数文件,修改后不会马上生效,数据库必须重启,重新读取该文件。spfile是动态参数文件,spfile的配置生效时限和作用域可由修改参数的SQL命令指定,可立即生效,也可不立即生效。(4) pfile和spfile可以用命令create pfile from spfile或create spfile from pfile来互相创建。(5) 启动次序spfile优先于pfile。(6) 如果是手动创建数据库而不是通过DBCA(Database Configuration Assistant)来创建,则开始创建数据库时只能定义pfile。(7) Oracle数据库只使用一个参数文件,有两种方法可判断数据库当前使用的是哪个参数文件。方法一: 通过create pfile鉴别。如果当前使用的是pfile,则相应格式的create pfile会产生错误。方法二: 使用show parameter spfile命令来显示spfile的位置。如果显示的值为空,则表示数据库当前使用的是pfile。3.1.3参数文件的读取1. 数据库启动时,参数文件的读取顺序首先在$ORACLE_HOME/dbs目录下查找spfile(sid).ora文件,即spfile文件。若该文件存在,则利用该文件启动数据库。若该文件不存在,则继续在该目录下查找init(sid).ora文件,即pfile文件。若pfile文件存在,则利用该文件启动数据库;若不存在,则Oracle报错,无法启动。2. 实例启动时,参数文件的读取顺序 (1) 数据库的startup命令可以指定启动哪一个pfile。需要注意的是,只能指定pfile,不能指定spfile。(2) 当startup命令未指定任何参数文件时,Oracle将从平台指定的默认位置上的服务器参数文件(spfile)中读取初始化参数。Oracle查找spfile或init.ora的顺序是: 首先查找名为spfile$ORACLE_SID.ora的文件;若未找到,则查找spfile.ora文件;若还未找到,则查找init$ORACLE_SID.ora文件。3.2实例实例(Instance)是数据库启动时初始化的一组进程和内存结构,一个单独的数据库可以被多个实例访问。在操作系统中,用ORACLE_SID来标识实例。在Oracle中,用参数INSTANCE_NAME来标识实例。二者值相同。Oracle实例分为以下两部分: (1) 内存结构。数据库启动时,系统首先在服务器内存中分配系统全局区(System Global Area,SGA),构成Oracle实例的内存结构。(2) 后台进程。启动若干个常驻内存的操作系统进程,构成Oracle实例的进程结构。3.2.1内存结构内存结构分为两部分: 系统全局区和程序全局区(Program Global Area,PGA)。1. 系统全局区Oracle将计算机内分配出来的一块内存区域称为系统全局区。该区域用于存储数据库信息,包括数据库实例的数据、Oracle运行时必备的控制信息等。数据库实例启动时自动分配SGA,数据库实例关闭时回收SGA内存。SGA是占用内存最大的一个区域,是影响数据库性能的重要因素。SGA由所有服务进程和后台进程所共享。 SGA由几个部分组成,其中最重要的有以下几个: 1) 数据库缓存区(Database Buffer Cache)数据库缓存区用来存放数据信息,它以数据块为单位进行读写。数据库缓存区的大小由DB_BLOCK_BUFFERS参数指定。调整和管理数据库时,调整数据库缓存区的大小是一个重要部分。Oracle使用最近最少使用算法(Least Recently Used,LRU)来管理可用空间。数据库缓冲区包括三个类型的区域: (1) 脏数据区(Dirty Buffers): 存放已被修改过并需要写回数据文件的数据块。(2) 自由区(Free Buffers): 未存放任何数据的空闲区域。(3) 保留区(Pinned Buffers): 存放正在处理的数据或者已明确保留为将来使用的数据区域。2) 重做日志缓冲区(Redo Log Buffer)对数据库所执行的任何操作,如对数据进行的修改、数据库管理员对数据库结构进行的修改等,都会被记录在重做日志文件中。当错误发生时,利用重做日志文件可以恢复数据库。例如,当数据被意外删除或修改时,可利用重做日志文件恢复原有数据。当出现实例失败或者介质失败时,也可利用日志文件实现实例恢复或者介质恢复。因此,管理好重做日志文件对于保障数据库数据安全非常重要。为重做日志文件专门设立的缓冲区称作重做日志缓冲区。重做日志缓冲区的大小由初始化参数LOG_BUFFER指定。重做日志缓冲区由很多条重做记录(Redo Record)组成,每条重做记录记载了被修改数据块的位置以及修改后的数据。3) 共享池(Shared Pool)共享池用来缓存各种程序数据,例如解析后的SQL、PL/SQL代码、系统参数以及数据字典等信息。数据中执行的任何操作几乎都会涉及共享池。例如,如果用户执行SQL语句,Oracle数据库就会访问共享池。共享池主要包括库缓存(Library Cache)、数据字典缓存(Data Dictionary Cache)、服务器结果缓存(Server Result Cache)、保留池(Reserved Pool)等几个组成部分。(1) 库缓存。库缓存是一个共享的内存区域,其中存储着可执行的,即已经解析过的SQL和PL/SQL代码。Oracle引入库缓存的目的是共享SQL和PL/SQL代码。服务器进程执行SQL和PL/SQL时,首先会进入库缓存,查找是否已经存在相同的语句。如果存在,就不再进行后续的编译处理,直接使用库缓存中已经编译好的语句。如果不存在,则再对所要执行的语句进行解析。SQL共享池通过最近最少使用算法来管理。(2) 数据字典缓存。数据字典缓存用于存储经常使用的数据字典信息,例如表的定义、用户名、口令、权限、数据库的结构等。Oracle在解析SQL语句时会经常访问该缓存,以确定操作对象是否存在,是否具有权限等。如果操纵对象不在数据字典缓存中,则服务器进程就从保存数据字典信息的数据文件中将其读入到数据字典缓存中。(3) 服务器结果缓存区。该区域缓存结果集合。该区域包含两个部分: SQL查询结果缓存和PL/SQL函数结果缓存。数据库可以将SQL查询结果缓存中的查询结果存储起来,将来有相同查询操作时则可直接调用结果,避免重新从磁盘读数据块、重新计算结果等一系列操作,从而提高查询效率。例如,某个应用重复执行相同的SELECT语句,如果将第一条SELECT语句的执行结果缓存起来,那么之后的SELECT操作,数据库就可以立即返回其结果。(4) 保留池。通常情况下,如果请求的内存空间较大,Oracle会将该请求分割成多个小的请求。但是在某些系统上,仍然会出现请求大片且连续的内存空间。如果在共享池中没有足够的空闲空间,Oracle会寻找并释放足够的共享池内存空间来满足这个请求,但这可能会带来较为严重的性能下降。因此,Oracle在共享池中保留了一块小的内存空间,以供共享池在没有足够空间时使用,这就是保留池。保留池使用大且连续的内存空间,更加高效。简言之,保留池就是划分出一部分空闲内存空间,以备不时之需。Oracle默认配置了比较小的保留池。4) 大池(Large Pool)大池是一个可选内存区。大池的一个主要用途是供共享的服务器进程使用,缓解对共享池和PGA区内存的使用压力。在缺少大池的情况下,这些进程将使用共享池中的内存,可能导致对共享池的性能下降。5) Java池(Java Pool)Java池用于在数据库中支持Java代码运行。例如,使用Java编写一个存储过程,这时Oracle的JVM(Java Virtual Machine)就会使用Java池来处理用户会话中的Java存储过程。Java池的大小由参数JAVA_POOL_SIZE来设定。6) 流池(Streams Pool) 流池主要用于对流的支持。流池是一个可选、可变内存区,它的大小可通过参数STREAMS_POOL_SIZE来指定。如果没有被指定,则初始值为0。池的大小会随着Oracle流的需求动态增长。2. 程序全局区程序全局区(PGA)是存放进程的数据和控制信息的一块内存区域,该内存区在进程启动时创建。每个Oracle进程拥有一个PGA,一个PGA也只能被拥有它的那个进程所访问。PGA由两组区域组成: 固定PGA和可变PGA。固定 PGA区域大小一旦确定就固定不变。该区域包含变量、数据结构和指向可变 PGA区域的指针。可变PGA区域实质上是一个内存堆,该区域也称为PGA堆。PGA堆是PGA区中占比最大的区域,它由以下三部分组成: (1) 私有SQL区。包含绑定信息、运行时的内存结构信息等。每个发出SQL语句的会话都对应一个私有SQL区。(2) SQL工作区。用于排序、多表哈希连接、位图合并及位图创建等操作。(3) 会话区。存放会话中的变量以及其他与会话相关的信息。3.2.2后台进程数据库的物理结构与内存结构之间的交互通过后台进程来完成。Oracle实例启动的过程就是按内存文件中参数的值加载内存,并启动相应的后台进程进行相关服务的过程。几个重要的后台进程如下: 1. 数据写进程数据写进程(Data Base Writer,DBWR)的功能是将缓冲区中的“脏数据”写入磁盘数据文件。这里的“脏数据”指的是缓冲区中被修改过的数据。为提高效率,并不是数据库缓冲区中的数据一发生变化,DBWR进程就立即写数据文件,而是积累足够多的数据后再批量地将缓冲区数据写入数据文件。下列事件之一发生时会触发该进程,执行写操作: (1) 缓冲区“脏数据”量超过所设定的阈值。 (2) 设定的写时间间隔已到。(3) 当有进程请求数据库缓冲区,却找不到空闲缓冲区时。(4) 当检查点发生时。(5) 当某个表被删除(Drop)或被截断(Truncate)时。(6) 当某个表空间被设置为只读状态时。(7) 当对某个表空间进行联机备份时。(8) 当某个临时表空间被设置为脱机状态(Offline)或正常状态(Normal)时等。2. 日志写进程日志写进程(Log Writer,LGWR)把日志缓冲区中的数据写到磁盘的归档日志文件中,从而完成数据库对象创建、更新数据等操作过程的记录。启动实例时该进程自动启动。下列事件之一发生时会触发LGWR进程,执行写操作: (1) 用户进程提交一个事务。(2) 日志缓冲区数据量超过所设定的阈值。(3) 请求LGWR切换日志文件。(4) 设定的写时间间隔已到。3. 检查点进程由于Oracle中LGWR进程和DBWR进程工作的不一致,Oracle引入了检查点进程(Check Point, CKPT),用于同步数据库,保证数据库的一致性。4. 归档进程当一个联机重做日志文件填满后,Oracle实例开始写入下一个联机重做日志文件。从一个联机重做日志文件切换到另一个联机重做日志文件的过程称为日志切换。归档进程(Archive,ARCH)的功能就是在每次进行日志切换时对已填满的日志组进行备份或归档。5. 进程监控器进程进程监控器进程(Process Monitor, PMON)的功能是在用户进程出现故障时执行进程恢复、清理内存、释放故障进程所占用资源等操作。PMON进程还周期地检查调度进程和服务器进程的状态,如果发现这些进程已停止,PMON进程会重启它们。PMON进程会被定时唤醒,或被其他进程主动唤醒。6. 系统监控器进程系统监控器进程(System Monitor,SMON)的功能是在实例启动时执行实例恢复,清理不再使用的临时段。SMON进程会被定时唤醒,或者被其他进程主动唤醒。第4章CHAPTER 4SQLPlus命令
4.1环境设置命令SQLPlus的环境特征参数一般由系统自动设置,用户可以根据需要将环境参数设置成需要的值,set命令和show命令主要就是完成这项功能的。set命令将SQLPlus的环境特征参数设置为开关状态或者某个确定的值。show命令将显示这些参数的值。4.1.1set命令使用set命令可以改变SQLPlus环境特征参数的值。其命令格式如下: set其中选项是指环境参数的名称,指该参数被设置成on还是off,或是某个具体的值。例41设置自动提交状态。SQL>set autocommit on下面给出几个常用的环境参数设置(其中有下画线者为系统的默认值)。(1) set autocommit{off|on|immediate}off关闭自动提交功能。on或imm打开自动提交功能。(2) set echo{off|on}on SQLPlus执行命令文件时,命令本身将显示在屏幕上。off执行命令文件时,命令本身不显示在屏幕上。(3) set feedback{off|on}on查询结束时,给出查询结果的记录数信息。off查询结束时,没有查询结果的记录数信息。(4) set heading {off|on}on各列的标题(包括文字和下画线)在结果报表上显示。off各列的标题不在报表上显示。(5) set linesize{80|n}该项设置SQLPlus的行宽,即一行所能显示的最大字符数。当用SQLPlus命令制图报表标题为居中或右对齐时,系统在计算标题的合适位置时也要用到这个参数。该参数的默认值为80个字符,最大值为999。(6) set pagesize{14|n}该参数设置每页输出的行数,包括ttitle(头标题)、btitle(底标题)、column(列标题)和空行。该项默认值是每页14行。(7) set pause{off|on|text}on在显示输出每一页后,等待用户按Return键继续显示。off表示每页显示之间不停顿。text在显示每一页后停顿,等待用户按Return键,并在屏幕下方显示text的提示信息。(8) set buffer {buffer}设置{buffer}为当前的命令缓冲区。通常情况下,SQL缓冲区为当前命令缓冲区。例42建立名为A的缓冲区。SQL>set buffer A由于SQL缓冲区只能存放一条SQL命令,所以可用set buffer命令设置其他命令缓冲区来存放多条SQL命令和SQLPlus命令。可以使用SQLPlus的行编辑——list、del、append、change等命令对该缓冲区中的所有行进行操作,也可以用save命令将该缓冲区中的内容保存到一个文件中,并可以用get命令将文件中的内容取回到缓冲区。但该命令缓冲区不能直接执行SQL或SQLPlus命令,而是通过将其中的内容保存到文件中,再使用start命令完成。不论是来自命令行还是命令文件,只要执行一个SQL命令,命令缓冲区就被自动置回为SQL缓冲区。但其他缓冲区中的内容依然存在,可以再次使用set buffer命令进入所需要的缓冲区。set命令对环境特征参数的改变只在本次会话期间内有效,即一旦退出SQLPlus,再进入时,用户所设置的参数值全部恢复成系统的默认值。4.1.2show命令show命令可以显示SQLPlus的一个或全部特征参数的值。其命令格式如下: show{all|选项}例43显示SQLPlus全部环境参数的值。SQL>show all例44显示自动提交状态的设置情况。SQL>show autocommit例45显示当前的用户标识,即当前的用户名。SQL>show user例46显示当前报表使用的头标题的内容。SQL>show ttitle 4.2用SQLPlus生成报表SQLPlus通常被认为是一种交互式的报表生成器,它使用SQL命令从Oracle数据库中获取信息。使用SQLPlus设置就能产生精练的、有良好格式的报表,使用户很容易地对题目、列标题、部分及总和进行控制,对数字和文字重新编排格式。例47使用下面的命令生成一张简单报表。 SQL>column deptno heading department/将deptno字段标题设为department/SQL>column ename heading name /将ename字段标题设为name/SQL>column sal heading salary /将sal字段标题设为salary/SQL>column sal format $99,999.00 /设置sal字段格式/SQL>ttitle ‘sample report for hitech corp’ /设置头标题/SQL>btitle ‘strictly confidential’ /设置底标题/SQL>break on deptno /将报表中的数据分组显示并设置组间间隔/SQL>compute sum of sal on deptno /计算分组数据的汇总值/SQL>select deptno,ename,sal /从emp表中选择sal>2000的deptno、from emp ename、sal列,并以deptno列排序/where sal>100order by deptno;生成的报表如图41所示。 图41生成的报表示意图应注意一点,SQLPlus格式命令的效果只有通过运行SQL命令才能看到。与制作报表有关的SQLPlus命令如表41所示。表41与报表相关的SQLPlus命令命令 定义ttitle 为报表的每一页设置头标题btitle 为报表的每一页设置底标题column 设置列的标题和格式break 将报表中的数据分组显示并设置组间间隔compute 计算分组数据的汇总值set linesize 设置报表每行允许的最大字符数set pagesize 设置每页的最大行数set newpage 设置页与页之间的空行数set headsep 设置标题分隔符4.2.1设置标题: ttitle和btitle从例47中能够看出,可以为报表的每一页设置头标题和底标题(也就是表头和表尾),它们是通过ttitle和btitle命令实现的。命令格式如下: ttitle[位置说明][off|on]btitle[位置说明][off|on]关于标题的位置说明,可以使用表42所示的子句。表42标题位置说明子句子句 举例 说明col ncol 72让标题信息从当前行左边的第n个位置开始显示skip nskip 2打印n个空行,如果n未指明,打印一个空行;如果n为0,则不打印空行;如果n大于1,则为两行文字间加入n-1个空行leftleft标题信息靠左放置centercenter标题信息居中放置rightright标题信息靠右放置例48设置头标题、底标题并居中放置。SQL>ttitle center ‘sales department personnel report’SQL>btitle center ‘company confidential’SQL>select deptno,ename,salfrom empwhere deptno=2;生成的报表如图4.2所示。例49如果想将表42的标题变换成更清楚的形式,可以增加一些子句,并使用set linesize设置。SQL>ttitle center ‘report’ skip 1->center ====================skip 1 left ‘personnel report’->right ‘sales department’ skip 2SQL>set linesize 60SQL>/报表显示如图43所示。图42设置头标题、底标题并居中放置图43变换标题形式显示的结果图关键字left、right和center确定了其后紧跟的内容在页上显示位置;skip表示在打印完该行后将打印多少空行;行未尾的破折号“—”表明标题命令未完,紧接下一行内容,在单引号内的正文将被如实打印。这个例子中最后一行数据与表尾之间没有定义空行,若需要在它们之间加入空行,可以使用skip n子句,如: SQL>btitle skip 1 center ‘company confidential’如果标题文本超过500个字符,可以使用SQLPlus的define命令,将各行的文本内容保存在不同的变量中。例如: SQL> depin line1= ‘this is the first line…’SQL> depin line2= ‘this is the second line…’SQL> depin line3= ‘this is the third line…’在ttitle和btitle中可以使用上面定义的变量。SQL>ttitle center line1 skip 1 center line2 skip 1 center line3图44显示当前页码另外,还可以控制页号的显示位置和格式。SQL.PNO是一个用来存储页号的变量,通过该变量可以对页号进行控制。例410在每页顶部显示当前页码,结果如图44所示。SQL>ttitle left ‘sales department’right ‘page:’format 999 sql.pno skip2 SQL>/如果不定义页号显示格式,SQL.PNO的宽度为9位。4.2.2设置报表尺寸每页报表中都包含表头、列标题、查询的结果和表尾信息。报表尺寸的设置对于这些内容的正确显示十分必要。系统默认的报表尺寸如下: 每页报表表头空1行;每页输出内容为14行(包括表头和表尾之间的所有内容);每行能显示的字符数为80。可以通过set命令改变上述设置。1. set newpage 命令该命令设置每一页的表头与每一页开始位置之间的空行数,实际上就是页与页之间的行数。命令如下: SQL>set newpage 0如果设置行数为0,将打印头移至下一页的开始,即报表打印的起始位置。如果将newpage设置变大,SQLPlus输出的信息行就会减小,而每页的总行数不变。2. set pagesize命令该命令设置每页的输出行数,包括表头、表尾、列标题和查询出的信息。对于一般的打印纸,该值通常设置为66。命令如下: SQL>set pagesize 66 set pagesize命令一般与set newpage相关连使用。3. set linesize命令该命令控制出现在一行上的最大字符数。命令如下: SQL>set linesize 30如果一行查询结果的总宽度超过了lineszie设置的行宽,SQLPlus将把多出的列折行输出。linesize的大小还会影响表头、日期和页码的放置位置,因为表头的居中显示和居右显示要根据linesize的值确定。例411重新设置新的报表尺寸。SQL>set pagesize 66SQL>set newpage 0SQL>set linesize 32若要恢复系统默认设置,则执行下列命令: SQL>set pagesize 14SQL>set newpage 1SQL>set linesize 804.2.3设置列column使用SQLPlus的column命令可以改变列标题及各列数据的显示格式。1. 设置列标题SQLPlus使用列名和列表达式名作为列标题的默认形式,如果需要改变列标题,可以使用column的heading子句:column列名heading列标题例412将查询emp表的结果生成报表,并为各列定义明确的标题。SQL>column deptno heading departmentSQL>column ename heading employeeSQL>column sal heading salarySQL>select deptno,ename,salfrom empwhere job= ‘salesman’;查询结果显示如图45所示。设置的这些列标题一直有效,直到它们被重新设置或用户退出SQLPlus。还可以使用set underline命令为列标题设置不同形式的下画线,例如: SQL>set underline=SQL>/结果如图46所示。图45改变列标题的emp表图46列标题设置成不同形式的下画线显示结果要恢复原来的下画线,使用下列命令: SQL>set underline ‘-’2. 设置列的格式所有的数据类型都有默认的显示格式,如果需要使用指定的格式显示数据,可以使用column命令。命令格式如下: SQL>column列名format 格式数值型数据使用9作为位数描述符,并可以加入逗号、$、尖括号、、/或前导0等字符。图47设置数值型格式例413显示工资值sal,加入$和逗号并使用0表示个位。SQL>column sal format $99,990SQL>/结果如图47所示。字符型数据的默认显示宽度为该字符数据定义的宽度,如果字符列的标题宽度超过字符数据宽度,则显示的宽度以列标题为准。long型显示的宽度由set long命令设置,其默认设置宽度为每行80个字符。date型一般默认显示格式为ddmonyy,宽度为9个字符。如果date型数据没有使用tochar函数进行转换,则该数据默认的格式由参数文件中的初始化参数确定。char、varchar2(varchar)、long以及date型数据使用column语句,以字母A作为格式描述符来改变数据的显式格式,而且这些数据以左对齐方式显示。如果定义的数据显示格式宽度比列标题短,列标题将会被截断。 3. 显示和重置列的显示属性若想显示某一列的显示属性,可以使用命令:SQL>column 列名若想显示所有列的显示属性,则使用命令:SQL>column如果想将某列的显示属性重置成默认形式,可以使用column命令的clear子句: SQL>column 列名clear若希望将所有列的显示属性重新置成默认的形式,则使用下列命令: SQL>clear columns显示结果为columns cleared。另外,还可以使用column的off、on子句对列的显示属性进行抑制或恢复。使用off子句命令如下:SQL>column 列名 off表示SQLPlus将以默认格式作为列的显示属性,但并不取消列属性,使用on子句则重新恢复列的显示属性,命令如下: SQL>column 列名 on
评论
还没有评论。