课程名称:Oracle11g数据库应用简明教程
实验题目:实验三使用报表统计各部门人数
姓名:李日中 学号:2010324264班级:10计本3班 实验日期:2013-4-19
成绩:
一、 实验目的
使用报表统计各部门人数
二、 实验环境
Oracle 11g R2 SQL*PLUS
三、 实验主要内容和主要操作步骤
编写脚本代码如下:
在C盘下创建文件test1.sql,文件内容为
/*使用TTITLE和BTITLE命令可以设置报表的页眉和页脚信息*/
ttitle left '日期:' _DATE center '使用报表统计各部门人数'
btitle center '谢谢使用该报表!' right '页:' format 999 skip 2 sql.pno
set echo off
set verify off
/*使用set pagesize 语句设置每页显示的行数*/
set pagesize 40
/*使用set linesize 语句设置每行的字符数*/
set linesize 100
/*清除列的格式化*/
clear columns
/*使用column命令格式化列的显示*/
column empno heading '员工编号' format 9999
column ename heading '员工姓名' format a10
column hiredate heading '受雇日期' justify center
column sal heading '员工工资' format $999,999.99
column deptno heading '部门编号' format 9999
/*使用break命令,根据deptno列值的不同分隔输出,重复的列值不进行显示*/
break on deptno
/*使用compute命令,根据deptno列统计empno的数量,显示为部门人数*/
compute COUNT label '部门人数' of empno on deptno
/*定义select语句,检索scott用户的emp表,将该表的记录按照deptno列进行*/
select empno,ename,mgr,hiredate,sal,deptno from scott.emp order by deptno;
/*清除列的格式*/
clear columns
/*关闭页眉和页脚*/
ttitle off
btitle off
本实验使用scott用户登录
执行在C盘编写好的test1.sql脚本文件,命令和结果如下:
Start c:\test1.sql
发觉输出结果过多,不能再一页输出,所以改变策略,将结果输出到文件,如下
Spool c:\info_test1.txt
Start c:\test1.sql
Spool off
查看fo_test1.txt文件内容,我们会发现输出结果很长,仔细观察,这些结果是有问题的,
问题一:这一查询结果是没有页数的
:问题二:所有的查询结果只有一页,但是该结果重复出现多次
问题所在,我把脚本代码中的多行注释内容去掉,代码如下
ttitle left '日期:' _DATE center '使用报表统计各部门人数'
btitle center '谢谢使用该报表!' right '页:' format 999 skip 2 sql.pno
set echo off
set verify off
set pagesize 40
set linesize 100
clear columns
column empno heading '员工编号' format 9999
column ename heading '员工姓名' format a10
column hiredate heading '受雇日期' justify center
column sal heading '员工工资' format $999,999.99
column deptno heading '部门编号' format 9999
break on deptno
compute COUNT label '部门人数' of empno on deptno
select empno,ename,mgr,hiredate,sal,deptno from scott.emp order by deptno;
clear columns
ttitle off
btitle off
再在C盘创建文件test2.sql,并粘贴上面脚本。运行
Start c:\t2.sql;
这时,我们就发现结果正常了
在实验中,发现一点,编写脚本文件的文件编码格式不能为UTF-8,否则会出现中文乱码,如图:
然后我把文件的编码方式改成ASCII就正常了,如果脚本使用记事本编写,默认就是ASCII编码,不会存在乱码问题,但是如果你采用像UE这样的编辑器(默认文件保存编码为UTF-8)时,就会出现问题。
其实出现这个问题也很容易理解,我们是基于Windows控制台(CMD)环境下做的实验,cmd跟记事本一样,微软默认让他们默认支持ASCII显示,所以在不修改默认属性的提前下,读取UTF-8编码的文件就会出问题。
然后,我们会问,那么不能这样多行注释,我们想注释怎么办,我们可以采用单行注释
如下:
-- 可以这样注释的吗?
TTITLE LEFT '日期' _DATE CENTER '使用报表统计各部门的人数'
-- 可以这样注释的吗?
BTITLE CENTER '谢谢使用该报表!' RIGHT '页:' FORMAT 999 SKIP 2 SQL.PNO
-- 可以这样注释的吗?
SET ECHO off
-- 可以这样注释的吗?
-- 可以这样注释的吗?
SET VERIFY OFF
-- 可以这样注释的吗?
SET PAGESIZE 40
-- 可以这样注释的吗?
SET LINESIZE 100
-- 可以这样注释的吗?
CLEAR COLUMNS
-- 可以这样注释的吗?
COLUMN empno HEADING '员工编号' FORMAT 9999
-- 可以这样注释的吗?
COLUMN ename HEADING '员工姓名' FORMAT A10
-- 可以这样注释的吗?
COLUMN mgr HEADING '上级编号' FORMAT 9999
-- 可以这样注释的吗?
COLUMN hiredate HEADING '受雇日期' JUSTIFY CENTER
-- 可以这样注释的吗?
COLUMN sal HEADING '员工工资' FORMAT $999,999.99
-- 可以这样注释的吗?
COLUMN deptno HEADING '部门编号' FORMAT 9999
-- 可以这样注释的吗?
BREAK ON deptno
-- 可以这样注释的吗?
COMPUTE COUNT LABEL '部门人数:' OF empno ON deptno
-- 可以这样注释的吗?
SELECT empno,ename,mgr,hiredate,sal ,deptno
-- 可以这样注释的吗?
FROM scott.emp
-- 可以这样注释的吗?
ORDER BY deptno;
-- 可以这样注释的吗?
CLEAR COLUMNS
-- 可以这样注释的吗?
TTITLE OFF
-- 可以这样注释的吗?
BTITLE OFF
我们会发现这样,这样的注释就不会影响输出结果了。
实验总结和体会
对于这几个格式化报表输出的命令没什么好说的,想说的,在实验中会出现各种问题,耐心点,就能注意到这些问题,然后通过假设出现这个问题的原因,然后动手测试,这样,一个一个问题解决,最终把问题解决。
总结:收获细节,也就收获了比别人更多的知识。