第一篇:oracle上机实验报告格式规范
Oracle上机实验报告
学生姓名:学号:班级:实验日期:
实验名称:
实验目的:
实验内容:
实验步骤及分析:(此部分为关键内容:要求整理实验主要步骤,总结编写实验过程中遇到哪些问题,如何解决的,若未解决也应总结,回答思考题的答案)
第二篇:操作系统上机实验报告格式规范
操作系统上机实验报告
学生姓名:学号:学院:
实验日期:
实验名称:
实验目的:
实验内容:
实验步骤及分析:
(此部分为关键内容。要求总结编写实验过程中遇到哪些问题,如何解决的,若未解决也应总结)
第三篇:Oracle实验报告
Oracle数据库实验报告
实验一:Oracle 10g安装卸载及相关工具配置
一、实验目标:
安装Oracle 10g,了解OEM,通过DBCA安装数据库,通过DBCA删除数据库,sqldeveloper连接数据库,卸载oracle 10g。
二、实验学时数 2学时
三、实验步骤和内容:
1、安装Oracle10g(默认安装数据库)双击setup.exe,选择基本安装,安装目录D:盘,标准版,默认数据库orcl,口令bhbh。进入先决条件检查界面时:网络配置需求选项不用打勾,直接下一步,是。直到安装成功。
2、登陆和了解OEM 主要是已网页的形式来对数据库进行管理。
第1页 http://主机IP:1158/em 用户名:sys 口令:bhbh 身份:sysdba 或者
用户名:system 口令:bhbh 身份:normal
3、通过DBCA删除已安装的默认数据库orcl 程序->OracleOraDb10g_home1->配置和移植工具->Database Configuration Assistant->创建数据库->……
5、sqldeveloper连接数据库 打开sqldeveloper,新建连接 连接名:system_ora 用户名:system 口令:bhbh 主机名:本机计算机名 SID:xscj 测试,显示成功,连接,保存。
第2页
6、卸载oracle 10g Windows下
1>停止所有Oracle服务,点Universal Installer卸载
2>删除注册表中的所有关于Oracle项
在HKEY_LOCAL_MACHINESOFTWARE下,删除Oracle目录
3>删除硬盘上所有Oracle文件。(1)Oracle安装文件
(2)系统目录下,在Program files文件夹中的Oracle文件
四、上机作业
根据实验步骤完成逐个实验目标中的任务。
五、心得体会
通过这次的实验,我了解了oracle数据库的情况。懂得了数据库就是把数据存储在一个类似与仓库的地方,需要用时才从数据库里调出来。通过上机实践,知道了装数据库和卸载数据库,并且学会了怎样连数据库。
实验二:Oracle 10g手工建数据库
一、实验目标:
安装Oracle 10g数据库环境,手工建立数据库;通过Net Configuration Assistant建立监听,使用sqldeveloper连接数据库测试。
二、实验学时数 2学时
三、实验步骤和内容:
先安装好Oracle 10g数据库环境(不安装默认数据库)。1.创建好相关的目录
第3页 假设oracle安装在D盘,打开命令行,运行->cmd-> md D:oracleproduct10.2.0adminmydbpfile md D:oracleproduct10.2.0adminmydbbdump md D:oracleproduct10.2.0adminmydbcdump md D:oracleproduct10.2.0adminmydbudump md D:oracleproduct10.2.0oradatamydb md D:oracleproduct10.2.0flash_recovery_areamydb 2.创建数据库实例
(1)设置环境变量SID(注:以后每打开一次CMD都要运行此句)set ORACLE_SID=mydb(2)创建口令文件
orapwd file=D:oracleproduct10.2.0oradatamydbPWDmydb.ora Password=bhbh entries=5(3)使用oradim命令创建数据库实例mydb oradim-new-sid mydb-startmode manual-pfile “D:oracleproduct10.2.adminmydbpfileinitmydb.ora” 3.用sys账户以sysdba的身份登录 输入sqlplus sys/bhbh as sysdba 4.创建实例初始化参数文件initmydb.ora,并将其放到D:oracleproduct10.2.adminmydbpfile路径下。
initmydb.ora # Copyright(c)1991, 2001, 2002 by Oracle Corporation
第4页 job_queue_processes=10 # Job Queues # Shared Server dispatchers=“(PROTOCOL=TCP)(SERVICE=mydbXDB)” # Miscellaneous compatible=10.2.0.1.0 # Security and Auditing remote_login_passwordfile=EXCLUSIVE # Sort, Hash Joins, Bitmap Indexes pga_aggregate_target=25165824 sort_area_size=65536 # Database Identification db_domain=“" db_name=mydb # File Configuration control_files=(”D:oracleproduct10.2.0oradatamydbcontrol01.ctl“, ”D:oracleproduct10.2.0oradatamydbcontrol02.ctl“,”D:oracleproduct10.2.0oradatamydbcontrol03.ctl“)db_recovery_file_dest=D:oracleproduct10.2.0flash_recovery_area db_recovery_file_dest_size=2147483648 # Pools
第5页 java_pool_size=50331648 large_pool_size=8388608 shared_pool_size=83886080 # Cursors and Library Cache open_cursors=300 # System Managed Undo and Rollback Segments undo_management=AUTO undo_tablespace=UNDOTBS1 # Diagnostics and Statistics background_dump_dest=D:oracleproduct10.2.0adminmydbbdump core_dump_dest=D:oracleproduct10.2.0adminmydbcdump user_dump_dest=D:oracleproduct10.2.0adminmydbudump # Processes and Sessions processes=150 # Cache and I/O db_block_size=8192 db_cache_size=25165824 db_file_multiblock_read_count=16
5.运行命令实例初始化 STARTUP NOMOUNT
第6页 pfile=”D:oracleproduct10.2.0adminmydbpfileinitmydb.ora“;6.运行创建数据库SQL命令 CREATE DATABASE mydb MAXINSTANCES 1 MAXLOGHISTORY 1 MAXLOGFILES 5 MAXLOGMEMBERS 5 MAXDATAFILES 100 DATAFILE 'D:oracleproduct10.2.0oradatamydbsystem01.dbf' SIZE 500M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED SYSAUX DATAFILE 'D:oracleproduct10.2.0oradatamydbsysaux01.dbf' size 20M UNDO TABLESPACE UNDOTBS1 DATAFILE 'D:oracleproduct10.2.0oradatamydbundotbs01.dbf' SIZE 150M REUSE AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED DEFAULT TEMPORARY TABLESPACE TEMP1 TEMPFILE 'D:oracleproduct10.2.0oradatamydbtemp01.dbf' SIZE 100M REUSE CHARACTER SET ZHS16GBK NATIONAL CHARACTER SET AL16UTF16 LOGFILE 'D:oracleproduct10.2.0oradatamydbredo01.log' SIZE 50M,第7页
'D:oracleproduct10.2.0oradatamydbredo02.log' SIZE 50M,'D:oracleproduct10.2.0oradatamydbredo03.log' SIZE 50M;7.创建用户表空间USERS CREATE TABLESPACE USERS DATAFILE 'D:oracleproduct10.2.0oradatamydbusers01.dbf' SIZE 128M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED;8.创建数据字典(需要几分钟,报错不要紧)
@D:oracleproduct10.2.0db_1RDBMSADMINcatalog.sql;9.创建内部包(需要几分钟,报错不要紧)
@D:oracleproduct10.2.0db_1RDBMSADMINcatproc.sql;10.创建自启动文件,以便以后不用每次打开数据库实例都要运行一次第5步。
create spfile FROM pfile='D:oracleproduct10.2.0adminmydbpfileinitmydb.ora';11.重启数据库,即关闭再打开。shutdown;connect sys/bhbh as sysdba;startup;12.授权用户system为dba,置密码为bhbh
第8页 grant dba to system identified by bhbh;13.使用system用户登录 conn system/bhbh;14.为system用户创建一张KC表 CREATE TABLE KC(KCH CHAR(3)NOT NULL, KCM CHAR(16)NOT NULL, KKXQ NUMBER(1)NOT NULL, XS NUMBER(2)NOT NULL, XF NUMBER(2), CONSTRAINT CH_KKXQ CHECK(kkxq between 1 and 8), CONSTRAINT ”PK_KCH“ PRIMARY KEY(”KCH“))TABLESPACE USERS;15.给KC表插入一条数据,并提交。
INSERT INTO KC VALUES('001','数据库',7,68,4);commit;16.测试查询 Select * from kc;17.使用Net Configuration Assistant添加监听器,并重启监听器(运行cmd->netca也一样)。
第9页 18.创建Em资料档案库(这一步可以省略,只为创建OEM,我们以后学习用不到)。
cmd->emca-config dbcontrol db-repos create 19.打开SQLDeveloper,并新建数据库连接并测试是否成功。
20.若之前手工安装数据库出现差错,可使用以下命令删除数据库实例: cmd->oradim-delete-sid mydb 然后删除第1步所建目录即可。
四、上机作业
根据实验步骤完成逐个实验目标中的任务。
五、心得体会:
通过这次的实验,明白了手动建数据库,建表空间等。还知道了运行数据库的命令,授权命令插表等等。这次学习让我对数据库的了解和运用又新的体会。
实验三:数据库修改
一、实验目标:
学习简化实验二里的实验步骤,学习修改数据库某些属性,完成数据库作业1:手工快速创建数据库实例XSCJ和数据库XSCJ。
二、实验学时数 2学时
三、实验步骤和内容:
第10页 1.安装好ORACLE 10g,(不需要安装数据库)。
2.快速安装数据库实例mydb和数据库mydb需要3个文件:init.bat,initmydb.ora,ctreatedb.sql。
(1)双击运行init.bat文件;
(2)将initmydb.ora放到正确的路径下(参考实验二);(3)在sqlplus环境下运行ctreatedb.sql
3.了解startup nomount,startup mount和startup三种状态的使用情况的区别,即打开实例不装载数据库、打开实例装载数据库但不打开数据库和打开实例装载数据库同时打开数据库。
(1)运行P45页例子2-7修改数据库(提示:startup;)ALTER DATABASE mydb DATAFILE 'D:oracleproduct10.2.0oradatamydbusers01.dbf' RESIZE 200M;(2)运行P45页例子2-9删除数据库(提示:startup mount;)取消数据库的受限制状态:
alter system enable restricted session;删除数据库: DROP DATABASE;(3)重建数据库
sys重新登录,运行ctreatedb.sql。
4.删除数据库实例mydb和数据库mydb。使用命令 oradim-delete-sid mydb 以及删除相关文件夹。
四、上机作业
第11页 适当地修改建库所用到的3个文件里的参数,手工安装数据库实例xscj和数据库xscj(快速安装),用户表空间myts。
五、心得体会
这次学习,让我明白了怎样修改数据库某些属性,手工快速创建数据库实例XSCJ和数据库XSCJ。DROP DATABASE命令可以删除数据库…
实验四:表的创建、修改和删除 以及表数据的插入、修改和删除
一、实验目标:
学习表的创建、插入、修改和删除以及表数据的插入、修改和删除。
二、实验学时数 4学时
三、实验步骤和内容: 1.手工创建好数据库XSCJ。
2.为用户system创建3个表XSB、KCB和CJB(P66-67 例子3.7-3.9,create table用法,自己照书完成)。
CREATE TABLE XSB(XH char(6)NOT NULL PRIMARY KEY, XM char(8)NOT NULL, XB char(2)DEFAULT '1' NOT NULL,第12页
CSSJ date NOT NULL, ZY char(12)NULL, ZXF number(2)NULL, BZ varchar2(200)NULL)TABLESPACE myts;CREATE TABLE KCB(KCH char(3)NOT NULL PRIMARY KEY,KCM char(16)NOT NULL, KKXQ number(1)NULL, XS number(2)NULL, XF number(1)NOT NULL)TABLESPACE myts;CREATE TABLE CJB(XH CHAR(6)NOT NULL, KCH CHAR(3)NOT NULL, CJ NUMBER(2), XF NUMBER(1), PRIMARY KEY(XH,KCH))TABLESPACE myts;3.学习修改表结构(P70 例子3.11(1)-(3)alter table用法)。(1)在表XSB中增加两列:JXJ(奖学金等级)、DJSM(奖学金等级说明)。
第13页 ALTER TABLE XSB ADD(JXJ number(1), DJSM varchar2(40)DEFAULT '奖金1000元');(2)在表XSB中修改名为DJSM的列的默认值。ALTER TABLE XSB MODIFY(DJSM DEFAULT '奖金800元');(3)在表XSB中删除名为JXJ和DJSM的列。ALTER TABLE XSB DROP COLUMN JXJ;ALTER TABLE XSB DROP COLUMN DJSM;修改好可用命令:describe table_name;查看。4.删除表(P71 drop table用法)。DROP TABLE table_name;5.向XSCJ数据库的表XSB中插入一行(P75 例子3.12 insert用法)。INSERT INTO XSB(XH, XM, XB, CSSJ, ZY, ZXF)VALUES('101101', '王林', '男',TO_DATE('19900210','YYYYMMDD'), '计算机', 50);提交数据: Commit;
插入后可用命令:select * from table_name;查看。
第14页 6.学习删除表数据(P78 DELETE和TRUNCATE的用法)。将XSCJ数据库的XSB表中总学分小于50的行删除: DELETE FROM XSB WHERE ZXF<50;使用TRUNCATE TABLE语句删除表中的所有数据,且不能恢复。TRUNCATE TABLE table_name;插入后可用命令:select * from table_name;查看。7.为3个表XSB、KCB和CJB插入数据(使用insert.sql)8.学习修改表数据(P78-79 例子3.17-3.20 UPDATE 用法)。UPDATE XSB SET BZ='三好' WHERE XH='101110';UPDATE XSB SET ZXF=ZXF+10;
UPDATE XSB SET ZY='通信工程', BZ='转专业学习', XH='101241' WHERE XM= '罗林琳';
UPDATE XS
第15页 SET ZXF=ZXF+ 4, BZ= '提前修完《数据结构》,并获得学分'
插入后可用命令:select * from table_name where(条件);查看。9.将数据恢复到刚插入时的状态(即把修改过的表清空再插入)。10.了解一下同义词,知道同义词的作用(不作重点)。
四、上机作业
手工安装数据库实例xscj和数据库xscj(快速安装),用户表空间myts后,为用户system创建3个表XSB、KCB和CJB,并插入所有数据。
五、心得体会
这次学习的表创建,删除和修改的学习使我对数据库的表的认识更进一步。通过这次的学习,学会对表的创建、修改、删除。创建表就是按格式写些代码;修改(UPDATE+表名+需修改的内容)和删除(DROP TABLE + 表名)就是使用指定的指令对表进行操作,使之完成想要的目的。
WHERE XM='李明';
实验五:数据库查询练习
一、实验目标:
学习数据库数据查询语句的基本方法以及视图的使用方法。
二、实验学时数
第16页 6学时
三、实验步骤和内容:
课本例子:4.5,4.6,4.8,4.9,4.12(2),4.14,4.15(2),4.16,4.17 4.18,4.19,4.28,4.29,4.37,4.39(1),(3),4.42,4.43,4.46
(一)学习和掌握课本查询语句的基本语法和使用方法,完成下面练习(*为必做,@为选做)。
*
1、查询所有计算机系学生的信息。Select * from xsb;*
2、查询王同学所修的学号
Select kch from xsb where xm like '王%';*
3、查询出生于85和86年的女同学的学号和姓名。Select xh,xm from xsb where cssj between to_date('19900101','yyyymmdd')and to_date('19911231','yyyymmdd')and xb='女';*
4、查询学号为101104所选修的全部课程成绩。Select cj from cjb where xh='101104';*
5、检索每个学生的姓名和年龄。
Select xm,to_char(sysdate,'yyyy')-to_char(cssj,'yyyy')as 年龄 from xsb;*
6、在XS表中检索学生的姓名和出生年份,输出的列名为姓名和生年 Select xm,to_char(cssj,'yyyy')as 出生时间 from xsb;*
7、在XS_KC表中,求选修课程206的学生的学号和得分,并将结果按分数降序排序。
第17页 Select xh,cj from cjb where kch=’206’ order by cj desc;*
8、把课程名为软件工程的成绩从学生选课数据表XS_KC中删除。Delete from kcb where kcm=(select kch from kcb where kcm=‘软件工程’);*
9、把女同学的成绩提高10%。
Update cjb set cj=cj*1.1 where xh in(select xh from xsb where xb='女')and cj<=90;*
10、如果学号为061106的学生的成绩少于90,则加上10分。Update cjb set cj=cj+10 where xh=’061106’and cj<90;*
11、查询学号为061104的学生选修的课程号和课程名。
Select xh,xm from xsb where xh in(select xh from cjb where kcb=’061104’;
*
12、检索学习课程号为206的学生学号与姓名。Select xm,xh from xsb where kch=’206’;*
13、检索‘李明’所选修的全部课程名称。
Select kcm from kch where xm=(select xm from xsb where xm=’李明’);*
14、查找每个同学的学号及选修课程的平均成绩情况。Select xh,avg as 课程号平均成绩 from cjb;*
15、求选修了各课程的学生的人数。
Select count(distinct xh)as 选修课程总人数 from cjb;Select kch as课程号 ,count(xh)as 选修人数 group by kch;
第18页 *
16、查询平均成绩都在80分以上的学生学号及平均成绩。Select xh,cj from cjb group by xh having avg(cj)>80;Select xh,cj from cjb group by xh having avg(cj)>80 order by avg(cj);Select xh,cj from cjb group by xh having avg(cj)>80 order by avg(cj)desc;*
17、查询至少有6人选修的课程号。
Select kch as 课程号 from cjb group by having count(*)>=6;*
18、检索选修课程号为101或102的学生学号,姓名和所在系
Select xh,xm,zy from kch=(select kch from kcb where kch=’101’and kch= ‘102’;
*
19、统计被学生选修的课程门数。Select cjb 每个学生情况以及选修课程情况
Select * from xsb inner join cjb on xsb.xh=cjb.xh Select xsb.*,cjb.* from xsb,cjb where xsb.xh=cjb.xh *20、查询没有选修数据库的学生学号,姓名和专业名。
@
21、取出选修‘操作系统’课程的学生姓名。
@
22、检索至少选修课程“数据结构”和“计算机基础”的学生学号。@
23、检索至少选修课程号为101和206的学生姓名。@
24、列出学生所有可能的选课情况。@
25、查询101号课程得最高分的学生的学号
@
26、‘计算机基础’课程得最高分的学生的姓名、性别、所在系。
第19页 @
27、将成绩最低的学生的成绩加上10分。@
28、所有成绩都在70分以上的学生姓名及所在系。@
29、列出选修课程超过3门的学生姓名及选修门数。@30、至少选修了两门课及以上的学生的姓名和性别 @
31、检索至少有两名男生选修的课程名。
@
32、统计每门课程的学生选修人数(超过10人的课程才统计)。@
33、计算机基础成绩比离散数学成绩好的学生
@
34、列出每个同学的学号、姓名及选修课程的平均成绩情况,没有选修的同学也列出。
@
35、列出每个同学的学号及选修课程号,没有选修的同学也列出
(二)视图
1、创建一个名为zy_view的视图,该视图可以用来查看每个系名称和学生人
Create or replace view zy_view(专业,专业人数)as select zy,count(xh)from xsb group by zy;
2、创建一名为xs_view的视图,该视图可以用来查看每个学生的姓名、选修的课程名和成绩。查看视图。
Create or replace view xs_view(姓名,课程名,成绩)as select xm kcm cj from xsb,kcb,cjb where xsb.xh=cjb.xh and cjb.kch=kcb.kch;
3、创建一个名为kc_view的视图,该视图可以用来查看每门课的课程号,课程名,选修人数和平均成绩。
Create or replace view kc_view(课程号,课程名,选修人数,平均成绩)as select kcb.kch,kcm,count(xh),avg(cj)from cjb,kcb where cjb.kch=kcb.kch group by kcb.kch,kcm;
4、利用kc_view视图,查看平均成绩最高的课程名。
Select 课程名 from kc_view where平均成绩=(select max(平均成绩)from kc_view);
5、修改xs_view视图,将视图重定义为每个学生的姓名、选课门数和平均
第20页 成绩。
Create or replace view xs_view(姓名,选课门数,平均成绩)as select xm,count(kch),avg(cj)from cjb,xsb where xsb.xh=cjb.xh group by xsb.xh,xm;
6、删除zy_view视图。Drop view zy_view;
四、上机作业
完成实验内容中的任务,并把语句记录在每道题的下面。
五、心得体会
这次学习,我知道了对表的内容的查询,修改的操作,并通过实践对这次操作命令进一步的熟悉,运用和掌握。还学会了怎么建立视图,视图是可以快速的查询多个表的不同的信息的图表,它使我们更方便。
实验六:索引和约束
一、实验目标:
(1)掌握索引的使用方法。
(2)掌握各种约束即数据完整性的实现方法。
二、实验学时数 2学时
三、实验步骤和内容: 1.关于索引
第21页 建立索引的最大好处是快速存取数据。
假设有10个学生,10门课,则成绩表会有100条记录,对于成绩表中某人某门课成绩的查找,最坏情况是逐行查找100次,即最后一行。而如果对成绩表中的学号和课程号创建索引,则最坏情况只需查找20次(先查找学号,再查找课程号)。
建立索引的原则:(1)先插数据再建索引。
(2)如果经常检索的内容仅为包含大量数据的表中少于15%的行,就需要创建索引。
(3)建立索引的先后顺序会影响查询的性能。2.创建索引表空间 CREATE TABLESPACE INDX DATAFILE 'D:oracleproduct10.2.0oradataxscjindx01.dbf' SIZE 32M REUSE AUTOEXTEND ON NEXT 1280K MINIMUM EXTENT 128K DEFAULT STORAGE(INITIAL 128K NEXT 128K MINEXTENTS 1 MAXEXTENTS 4096 PCTINCREASE 0);2.创建索引
CREATE INDEX kc_name_idx ON KCB(KCM)TABLESPACE ”INDX";3.维护索引
第22页 ALTER INDEX kc_name_idx
4.删除索引 DROP INDEX kc_idx;5.数据完整性
生活中有些数据除了数据类型和宽度,还必须要定义其他规则的,比如学生学号必须是唯一的,不能重复的;性别必须是男或女,成绩必须是0-100的范围等。因此必须使用一些方法对数据进行约束,才得以保持数据完整性。
6.约束
(1)建表同时添加约束: XSB表: 主键为学号。KCB表: 课程号为主键,开课学期默认值为1,且只能为1-8。CJB表
主键为学号和课程号,存在外键XH参照XSB表的XH,存在外键KCH参照KCB表的KCH。(2)建表后时添加约束 XSB表:
第23页 RENAME TO kc_idx;性别必须为“男”或者“女”。CJB表:
成绩必须>=0且<=100或者为空。7.插入数据验证。8.思考题
(1)建KCB表时添加约束,使课程号必须为三位0-9数字
(2)建XSB表时添加约束,使学号为101开头,后三位为0-9数字
四、上机作业
完成实验内容中的任务,并把语句记录在每道题的下面。
五、心得体会
通过这次的学习,我知道了索引的最大好处是快速存取数据。1:先插数据再建索引。2:如果经常检索的内容仅为包含大量数据的表中少于15%的行,就需要创建索引。3:建立索引的先后顺序会影响查询的性能。这3条是建立索引的原则。
我还知道了可以增加约束,就是制约范围。
实验七:PL/SQL编程
一、实验目标:
(1)掌握变量、运算符以及控制语句的使用。(2)掌握系统函数和自定义函数的使用。
二、实验学时数 4学时
三、实验步骤和内容: SYS登录,先导入数据字典:
第24页 @D:oracleproduct10.2.0db_1RDBMSADMINcatalog.sql;@D:oracleproduct10.2.0db_1RDBMSADMINcatproc.sql;(1)定义变量
例子1:定义一个长度为10的变量count,其初始值为1,是varchar2类型。
count varchar2(10):= '1';例子2:在表XSB中包含XH列,为了声明一个变量my_xh与XH列具有相同的数据类型,声明时可使用点和%TYPE属性,格式如下:
my_xh XSB.XH%TYPE;例子3:可以使用%ROWTYPE属性声明描述表的行数据的记录。
如:声明一个记录名为cj_rec,它与CJB表具有相同的名称和数据类型,格式如下:
DECLARE cj_rec CJB%ROWTYPE;对于用户定义的记录,必须声明自己的域: DECLARE TYPE TimeRec IS RECORD(HH number(2),MM number(2));(2)程序块
例子6.6:查询总学分大于50的学生人数 set serveroutput on DECLARE v_num number(3);
第25页 BEGIN SELECT COUNT(*)INTO v_num
FROM xsb
WHERE zxf>50;
IF v_num<>0 THEN dbms_output.put_line('总学分>:50的人数为:'|| TO_CHAR(v_num));END IF;END;/ 例子6.9:求10的阶乘。DECLARE n number:=1;count1 number:=2;BEGIN LOOP
n:=n*count1;
count1:=count1+1;
IF count1>10 THEN
EXIT;END IF;
第26页 END LOOP;DBMS_OUTPUT.PUT_LINE(to_char(n));END;/(3)函数
系统函数:例子6.20、6.21、6.22、6.23、6.24 自定义函数:例子6.26、6.27、6.28
如果李明同学的年龄大于20岁,则显示“李明同学年龄为X岁”,否则打印“李明同学不符合条件” set serveroutput on declare age number(2);begin select to_char(sysdate, 'yyyy')-to_char(cssj, 'yyyy')into age from xsb where xm='李明';if age>20 then dbms_output.put_line('李明同学年龄为'||to_char(age)||'岁');else dbms_output.put_line('李明同学不符合条件');end if;end;/
2.计算1+3+5+……+99的和,并显示结果。
declare s number:=0;i number:=1;begin loop
第27页 s:=s+i;i:=i+2;exit when i>99;end loop;dbms_output.put_line(to_char(s));end;/
3.编写一个函数f_age,可以在xs表中根据姓名求出某人的年龄。
create or replace function f_age(sname in char)return number as age number;begin select to_char(sysdate,'yyyy')-to_char(cssj,'yyyy')into age from xsb where xm=sname;return(age);end;/
4.改写第1题的程序块,调用函数f_age来求年龄。set serveroutput on;declare age number(2);begin age:=f_age('李明');if age>20 then dbms_output.put_line('李明同学年龄为'||to_char(age)||'岁');else dbms_output.put_line('李明同学不符合条件');end if;end;/
第28页
四、上机作业
完成实验内容中的任务,并把语句记录在每道题的下面。
五、心得体会
通过这次的学习,学会了用sql语言编写简单的程序,定义和调用简单函数。在此基础上还巩固了sql语句查询的方法。在以后的学习中要多加理解,上机练习。
实验八:游标与存储过程
一、实验目标:
(1)掌握游标的使用方法。(2)掌握存储过程的使用方法。
二、实验学时数 6学时
三、实验步骤和内容: 游标 例子:
set serveroutput on DECLARE v_xh char(6);v_zxf number(2);CURSOR XS_CUR3
第29页 IS SELECT XH,ZXF FROM XSB WHERE ZYM='计算机';BEGIN OPEN XS_CUR3;FETCH XS_CUR3 INTO v_xh,v_zxf;WHILE XS_CUR3%FOUND LOOP dbms_output.put_line(v_xh||' '||TO_CHAR(v_zxf));FETCH XS_CUR3 INTO v_xh,v_zxf;END LOOP;CLOSE XS_CUR3;END;1.使用游标,将平均分大于75分的学生的学号、姓名、平均分逐行输出。
set serveroutput on DECLARE v_xh char(12);v_xm char(12);v_cj number(38);CURSOR XS_CUR3 IS SELECT CJB.XH,XSB.XM,avg(CJ)FROM XSB,CJB WHERE xsb.xh=cjb.xh group by CJB.XH,XSB.XM having avg(cj)>75;
第30页 BEGIN OPEN XS_CUR3;FETCH XS_CUR3 INTO v_xh,v_xm,v_cj;WHILE XS_CUR3%FOUND LOOP dbms_output.put_line(v_xh||' '||TO_CHAR(v_xm)||v_cj);FETCH XS_CUR3 INTO v_xh,v_xm,v_cj;END LOOP;CLOSE XS_CUR3;END;存储过程 例子1:
CREATE OR REPLACE PROCEDURE update_info(xname in char)AS xf number;BEGIN SELECT ZXF INTO xf FROM XS WHERE XM=xname;IF XF>60 THEN UPDATE XSB SET BZ='三好学生' WHERE XM= xname;
第31页
END IF;IF XF<35 THEN UPDATE XS SET BZ='学分未修满' WHERE XM=xname;END IF;END update_info;执行:
(1)EXECUTE update_info('李明');(2)begin update_info('李明');end;例子2: CREATE OR REPLACE PROCEDURE count_grade(zym in char,person_num out number)AS BEGIN
SELECT COUNT(XH)
INTO person_num
FROM XS WHERE ZYM=zym;END count_grade;
第32页 执行:
set serveroutput on DECLARE v_num number;BEGIN count_grade('计算机',v_num);dbms_output.put_line(v_num);END;/ 1.创建一个存储过程p_delete可以删除CJB表的信息。CREATE OR REPLACE PROCEDURE p_delete AS
BEGIN delete FROM CJB;END p_delete;执行
EXECUTE p_delete;
2.创建一个存储过程p_insert,可以给学生表添加一条记录。CREATE OR REPLACE PROCEDURE p_insert(XH IN CHAR,XM IN CHAR,XB IN CHAR,CSSJ IN DATE,ZY IN CHAR,ZXF IN NUMBER,BZ IN CHAR)AS BEGIN insert into xsb values(XH,XM,XB,CSSJ,ZY,ZXF,BZ);END p_insert;执行:
execute p_insert('102222','罗','女',to_date('19860310','yyyymmdd'),'通信工程',50,'转专业学习');
第33页
3.创建一个存储过程p_count,输入参数为姓名,输出参数为选课门数,平均成绩。CREATE OR REPLACE PROCEDURE p_count(XNO IN CHAR,K_COUNT OUT NUMBER,AVG_CJ OUT NUMBER)BEGIN SELECT count(kch),avg(cj)INTO K_COUNT,AVG_CJ FROM XSB,CJB WHERE XSB.XH=CJB.XH AND XSB.XH=XNO;END p_count;
set serveroutput on DECLARE v_num1 number;v_num2 number(4,2);BEGIN p_count('101104',v_num1,v_num2);dbms_output.put_line(v_num1||' '||v_num2);END;
四、上机作业
完成实验内容中的任务,并把语句记录在每道题的下面。
五、心得体会
通过这次学习,我知道了游标和存储过程,还知道了游标和存储过程的使用方法,并且掌握了它们的使用方法,为以后打下基础。
实验九:触发器、用户角色创建和逻辑备份
第34页
一、实验目标:
(1)掌握触发器的使用。
(2)掌握用户和角色的创建和使用。(3)掌握数据表的导入导出。
二、实验学时数 2学时
三、实验步骤和内容:
(一)触发器
例子1: 假设XSCJ数据库中增加一个新表XSB_HIS,表结构和表XSB相同,用来存放从XSB表中删除的记录。创建一个触发器,当XSB表被删除一行,把删除的记录写到日志表XSB_HIS中。
CREATE OR REPLACE TRIGGER del_xs BEFORE DELETE ON XSB FOR EACH ROW BEGIN INSERT INTO XSB_HIS(XH,XM, XB,CSSJ, ZY, ZXF,BZ)VALUES(:OLD.XH,:OLD.XM, :OLD.XB, :OLD.CSSJ, :OLD.ZY, :OLD.ZXF, :OLD.BZ);END;1.创建一个触发器,当XSB表删除一个人时,把这个人的选课信息也删掉。CREATE OR REPLACE TRIGGER del_xs BEFORE DELETE ON XSB FOR EACH ROW BEGIN
第35页 DELETE FROM CJB WHERE XH=:OLD.XH;END del_xs;
(二)用户和角色
1.创建一个用户tom,密码为cat。该用户角色为dba。使用该用户建表,插入数据。
CREATE USER tom identified by cat default tablespace users;grant dba to tom;导入table.sql和insert.sql drop user tom cascade;
(三)数据库逻辑备份 exp和imp的使用
(1)将XSB,KCB和CJB表导出成为DMP文件
(2)将XSB,KCB和CJB表删除
(3)将刚导出DMP文件导入恢复3个表
(1)将用户tom导出成为DMP文件
(2)将用户tom删除再重建
(3)将刚导出DMP文件导入恢复用户tom
四、上机作业
完成实验内容中的任务。
五、心得体会
第36页 通过这次实践,我明白了什么是触发器,并掌握的它的使用方法,还掌握了用户和角色的创建和使用。还学会了数据表的导入导出,使保存数据变的很容易。
第37页
第四篇:上机实验报告格式
请各位同学按照下列格式写:否则按照0分记
上机实验报告格式
Matlab学习第?次上机实验报告(第?次)
姓名:???班级:???上机时间:??????
1.上机内容
2.建模及算法分析
3.程序
4.小结
5.参考文献
将文档发到我的邮箱里面
learn_matlab@163.com
第五篇:上机实验报告
一. 题目1. 建立一个学生档案,内容包括学号,姓名,年龄,性别,数学,物理和英语3门功课成绩。要求实现以下功能:1)数据输入;2)查询某个学生的成绩;3)按平均排列输出;4)统计某门课各分数段人数;5)删除某个学生记录;2. 编程实现对二位数进行加,减,乘运算,每运行一次程序做10道题,完成后给出成绩(每题10分)。二. 设计思想和模块划分1.1.先定义所需要的条件,例如,姓名,学号,性别,三门功课的成绩,平均分等。2.输入姓名,学号,性别,年龄,三门功课的成绩后,就输出相应的姓名,学号,性别,年龄,三门功课的成绩。3.打印表头;4.在求出平均分,并打印出平均分。5.在查找学生,并打印出学生的相关资料;并按照平均分的高低排列;6.在统计学生各科成绩是否》=60分,如果是就是通过,否就是没通过,最后打印出最后的结果。7.删除学生,选中删除的学生,如果确定要,那么该学生的一切记录就变为0;2.1.随机调用函数,产生两个其值为10到99的随机整数分别放在c,d中用作运算时的运算数。2.随机调用函数,产生一个值为1到3 的随机整数放入b中,用来选择不同的运算。根据b的值选择不同的运算。当b=1时,去进行c+d的运算练习;当b=2 时,去进行c-d的运算练习;当b=3时,去进行c×d的运算练习。每完成一个算题就给出是否正确的信息。3.根据答案正确与否统计。正确时,显示’right’;错误时,显示’wrong’。4.步骤1.2.3.4.重复10次。5.输出学生成绩。三. 运行结果1.Input the 1 student :num:03name:wfage:18sex:fmath:98phy:75eng:65Input the 2 student :num:06name:scage:17sex:fmath:78phy:45eng:65Input the 3 student :num:09name:ytage:17sex:mmath:69phy:75eng:501.readin 2.finds 3.del 4.tj 5.exit1-----------------------------table----num name age sex math phy eng ave------3 wf 18 f 98.0 75.0 65.0 79.3------9 yt 17 m 69.0 75.0 50.0 64.7-------6 sc 17 f 78.0 45.0 65.0 62.7-------1.readin 2.finds 3.del 4.tj 5.exit2Into number:3---num name age sex math phy eng ave---3 wf 18 f 98.0 75.0 65.0 79.3----1.readin 2.finds 3.del 4.tj 5.exit3Into number:6---num name age sex math phy eng ave---6 sc 17 f 78.0 45.0 65.0 62.6---true? Y/Ny1----------------table------------------num name age sex math phy eng ave----3 wf 18 f 98.0 75.0 65.0 79.3-----9 yt 17 m 69.0 75.0 50.0 64.7-----0 0 0 f 0.0 0.0 0.0 0.0-----1.readin 2.finds 3.del 4.tj 5.exit4 1.input the math 2.input the phy 3.input the eng 1math: pass num is :3 no pass num is :02.32+82=114right!97*15=1455right!99-58=41right!76-66=10right!58+13=71right!37+49=86right!99+52=151right!49*69=5462wrong!73-38=31wrong!86+34=120right!mark is 80四. 主要错误改正方法1.在本题的编写过程中常出现begin 和end 不配对,只要始它们的个数相同就可以了,就可以了。在程序中常出现的’unknown identifier’没有定义的错误,只要在程序前加上定义,就可以了。还有就是type mismatch’的类型不匹配,只要根据前后内容,重新定义,就可以了。2.在本题编写中,题目要求是两个两位数运算,如果写成c:=random(100)在运行过程中,就会出现一位数运算,只要把它写成c:=random(90)+10,就可以了。五. 实习小结1.第一题的程序编写比较复杂,需要较多的定义,因而在后面的程序部分,就常出现标识符重复,而导致的类型不匹配。还有就是每个部分编好后,上下不能连接,而无法调用。2.第二题较第一题简单,和书上的例题类似,所以,比较简单,但从中也出现一些不问题。以上两大题中出现的问题,要在同学的帮助下,才能完成。总的来说两题程序比较困难六. 程序清单1.program twins;const m=3;n=3;typestudent=recordnum:integer;name:string[3];age:integer;sex:char;s:array[1..n] of real;math,eng,phy:real;ave:real;end;sarr=array[1..m] of student;ta=array [1..m] of student;f=string[6];varstu:sarr;ct:ta;k,d:integer;procedure readin(var stu:sarr);const wrong='0<=data<=100 ,again!';var j,i:integer;a:student;beginwriteln;writeln('Input ',m,' num name sex math phy eng',' of student.');for j:=1 to m dobeginwriteln;writeln('Input the ',j,' student :');with a dobeginwrite('num:');readln(num);write('name:');readln(name);write('age:');readln(age);write('sex:');readln(sex);while(sex<>'m')and(sex<>'f')dobeginwrite('sex:');readln(sex)end;for i:=1 to n do begincase i of1:begin write('math:');readln(s[i]);while(s[i]<0)or(s[i]>100)dobeginwriteln(wrong);write('math:');readln(s[i]);end;end;2:begin write('phy:');readln(s[i]);while(s[i]<0)or(s[i]>100)dobeginwriteln(wrong);write('phy:');readln(s[i]);end;end;3:begin write('eng:');readln(s[i]);while(s[i]<0)or(s[i]>100)dobeginwriteln(wrong);write('eng:');readln(s[i]);end;end;end;end;stu[j]:=a;end;writeln;end;end;procedure ave(var stu:sarr);var j,i:integer;k:real;beginfor j:=1 to m dobegink:=0;with stu[j] dobeginfor i:=1 to n do k:=k+s[i];ave:=k/nend;end;end;procedure px(var stu:sarr);var tm:ta;j,i,p:integer;beginfor j:=1 to m dobeginp:=j;for i:=j+1 to m doif stu[i].ave>stu[p].ave then p:=i;tm[1]:=stu[p];stu[p]:=stu[j];stu[j]:=tm[1];end;end;procedure head(ct:ta);var i:integer;beginwrite(' ');for i:=1 to 72 do write('-');writeln;write('',' num':4,' ','name':9,' ','age':8,' ','sex':5,' ','math':6,' ','phy':9,' ','eng':8,' ');writeln('ave':6,' ');write(' ');for i:=1 to 72 do write('-');writeln;with ct[1] dobeginwrite('',num:7,' ',name:8,' ',age:8,' ',sex:5,' ');for i:=1 to n do write(s[i]:7,' ');write(ave:10,' ');writeln;end;write(' ');for i:=1 to 72 do write('-');writeln;end;procedure find(var stu:sarr);var n,i:integer;u:boolean;beginu:=true;while u dobeginwrite('Into number:');readln(n);for i:=1 to m dobeginif stu[i].num=n then beginct[1]:=stu[i];u:=false;d:=iend;end;end;end;procedure del(var stu:sarr);var i:integer;b:char;beginhead(ct);write('true? Y/N');readln(b);if b='y' then begin write('1');with stu[d] dobeginnum:=0;name:='0';age:=0;sex:='f';for i:=1 to n do s[i]:=0;ave:=0end;endelseend;procedure tj(var stu:sarr);var w1,q1,q2,num,j:integer;h1,h2,h3:boolean;beginh1:=false;h2:=false;h3:=false;q1:=0;q2:=0;writeln(' ':30,'1.input the math 2.input the phy 3.input the eng ');readln(w1);case w1 of1:h1:=true;2:h2:=true;3:h3:=true;end;if h1 thenbeginbeginfor j:=1 to m dowith stu[j] doif stu[j].math>=60 thenq1:=q1+1elseq2:=q2+1;writeln('math:');end;if h2 thenbeginbeginfor j:=1 to m dowith stu[j] doif stu[j].phy>=60 thenq1:=q1+1elseq2:=q2+1;writeln('phy:');end;if h3 thenbeginbeginfor j:=1 to m dowith stu[j] doif stu[j].eng>=60 thenq1:=q1+1elseq2:=q2+1;writeln('eng:');end;end;end;end;writeln(' ':5,'pass num is :',q1);writeln(' ':5,'no pass num is :',q2);end;procedure head1(var stu:sarr);var j,i:integer;beginwriteln('----------------table--------------':60);writeln;write(' ');for i:=1 to 72 do write('-');writeln;write('',' num':4,' ','name':9,' ','age':8,' ','sex':5,' ','math':6,' ','phy':9,' ','eng':8,' ');writeln('ave':6,' ');write(' ');for i:=1 to 72 do write('-');writeln;for j:=1 to m do beginwith stu[j] dobeginwrite('',num:7,' ',name:8,' ',age:8,' ',sex:5,' ');for i:=1 to n do write(s[i]:7:1,' ');write(ave:10:1,' ');writeln;end;write(' ');for i:=1 to 72 do write('-');writeln;end;end;beginreadin(stu);ave(stu);k:=0;while k<>5 dobeginwriteln('1.readin 2.finds 3.del 4.tj 5.exit');read(k);readln;while(k<>1)and(k<>2)and(k<>3)and(k<>4)and(k<>5)dobeginwriteln(' mistake,please again');read(k)end;case k of1: begin px(stu);head1(stu)end;2: begin find(stu);head(ct)end;3: begin find(stu);del(stu);px(stu);head1(stu)end;4: begin tj(stu);end;5: writeln('exit!');end;end;end..2.program shadow;var a,b,c,d,e:integer;right:boolean;procedure s1;beginwriteln('right!');right:=trueend;procedure s2;beginwriteln('wrong!');right:=falseend;procedure s3(x,y:integer);var h:integer;beginwrite(x,'+',y,'=');readln(h);if h=x+y then s1else s2 end;procedure s4(x,y:integer);var h,w:integer;beginif x