1、Oracle存储过程和触发器基本操作南华大学计算机科学与技术学院实 验 报 告 ( 20122013 学年度 第二学期 )课程名称Oracle高级数据库开发设计实验名称存储过程与触发器基本操作姓名学号专业班级地点教师前提表脚本:create table S_RZ0122 ( Sno varchar2(11) primary key, Sname varchar2(20) not null, Ssex varchar(2) not null , Sage number(2) not null, Sdept varchar(20) not null ) create table C_RZ0122(
2、 Cno varchar2(20) primary key, Cname varchar2(20) not null , Ccredit number(2) not null ) create table SC_RZ0122( Sno varchar2(11) not null, Cno varchar2(20) not null, Score number(3) , primary key(Sno ,Cno), foreign key(Sno) references S_RZ0122(Sno), foreign key(Cno) references C_RZ0122(Cno) )INSER
3、T INTO S_RZ0122 (Sno ,Sname,Ssex,Sage ,Sdept) VALUES(0811101,李勇,男,21,计算机系)INSERT INTO S_RZ0122 (Sno ,Sname,Ssex,Sage ,Sdept) VALUES(0811102,刘晨,男,20,计算机系)INSERT INTO S_RZ0122 (Sno ,Sname,Ssex,Sage ,Sdept) VALUES(0811103,王敏,女,20,计算机系)INSERT INTO S_RZ0122 (Sno ,Sname,Ssex,Sage ,Sdept) VALUES(0811104,张小
4、红,女,19,计算机系)INSERT INTO S_RZ0122 (Sno ,Sname,Ssex,Sage ,Sdept) VALUES(0821101,张立,男,20,信息管理系)INSERT INTO S_RZ0122 (Sno ,Sname,Ssex,Sage ,Sdept) VALUES(0821102,吴宾,女,19,信息管理系)INSERT INTO S_RZ0122 (Sno ,Sname,Ssex,Sage ,Sdept) VALUES(0821103,张海,男,20,信息管理系)INSERT INTO S_RZ0122 (Sno ,Sname,Ssex,Sage ,Sdep
5、t) VALUES(0831101,钱小平,女,21,通信工程系)INSERT INTO S_RZ0122 (Sno ,Sname,Ssex,Sage ,Sdept) VALUES(0831102,王大力,男,20,通信工程系)INSERT INTO S_RZ0122 (Sno ,Sname,Ssex,Sage ,Sdept) VALUES(0831103,张珊珊,女,19,通信工程系)-增加课程信息脚本:-insert allINSERT INTO C_RZ0122 (Cno ,Cname ,Ccredit ) VALUES (C001,高等数学,4)INSERT INTO C_RZ0122
6、 (Cno ,Cname ,Ccredit ) VALUES (C002,大学英语,3)INSERT INTO C_RZ0122 (Cno ,Cname ,Ccredit ) VALUES (C003,大学英语,3)INSERT INTO C_RZ0122 (Cno ,Cname ,Ccredit ) VALUES (C004,计算机文化学,2)INSERT INTO C_RZ0122 (Cno ,Cname ,Ccredit ) VALUES (C005,VB,2)INSERT INTO C_RZ0122 (Cno ,Cname ,Ccredit ) VALUES (C006,数据库基础,4
7、)INSERT INTO C_RZ0122 (Cno ,Cname ,Ccredit ) VALUES (C007,数据结构,4)INSERT INTO C_RZ0122 (Cno ,Cname ,Ccredit ) VALUES (C008,计算机网络,4)select * from C_RZ0122;-增加关联学生和课程信息脚本:-INSERT ALLINSERT INTO SC_RZ0122(Sno,Cno,Score) VALUES (0811101,C001,96)INSERT INTO SC_RZ0122(Sno,Cno,Score) VALUES (0811101,C002,80
8、)INSERT INTO SC_RZ0122(Sno,Cno,Score) VALUES (0811101,C003,84)INSERT INTO SC_RZ0122(Sno,Cno,Score) VALUES (0811101,C005,62)INSERT INTO SC_RZ0122(Sno,Cno,Score) VALUES (0811102,C001,92)INSERT INTO SC_RZ0122(Sno,Cno,Score) VALUES (0811102,C002,90)INSERT INTO SC_RZ0122(Sno,Cno,Score) VALUES (0811102,C0
9、04,84)INSERT INTO SC_RZ0122(Sno,Cno,Score) VALUES (0821102,C001,76)INSERT INTO SC_RZ0122(Sno,Cno,Score) VALUES (0821102,C004,85)INSERT INTO SC_RZ0122(Sno,Cno,Score) VALUES (0821102,C005,73)INSERT INTO SC_RZ0122(Sno,Cno,Score) VALUES (0821102,C007,0)INSERT INTO SC_RZ0122(Sno,Cno,Score) VALUES (082110
10、3,C001,50)INSERT INTO SC_RZ0122(Sno,Cno,Score) VALUES (0821103,C004,80)INSERT INTO SC_RZ0122(Sno,Cno,Score) VALUES (0831101,C001,50)INSERT INTO SC_RZ0122(Sno,Cno,Score) VALUES (0831101,C004,80)INSERT INTO SC_RZ0122(Sno,Cno,Score) VALUES (0831102,C007,0)INSERT INTO SC_RZ0122(Sno,Cno,Score) VALUES (08
11、31103,C004,78)INSERT INTO SC_RZ0122(Sno,Cno,Score) VALUES (0831103,C005,65)INSERT INTO SC_RZ0122(Sno,Cno,Score) VALUES (0831103,C007,0)select Sno,Cno,Score from SC_RZ0122;一 实验题目 存储过程与触发器基本操作 二 实验要求 掌握对存储过程和触发器的创建、修改等基本操作。3 实验步骤及过程 根据实验 3创建的数据库及表,完成以下内容: (1) 在JXGL数据库中创建一存储过程并运行,从 S 表中查询所有女生的信息。 创建存储过
12、程prWoman执行存储过程prWoman(2) 在 JXGL 数据库中创建一存储过程并运行,从 S 表中根据学号查询并返回该学生的姓名和年龄。 创建存储过程执行存储过程(3) 在JXGL数据库中创建一触发器,保证 S 表中学生的年龄在 8-45 岁之间。 触发器说明:(触发器是特定事件出现的时候,自动执行的代码块。类似于存储过程,触发器与存储过程的区别在于:存储过程是由用户或应用程序显式调用的,而触发器是不能被直接调用的。) 首次创建出错:错误在下面,因为SYS用户所属的表中不能创建触发器,所以先复制了一份表到SYSTEM用户中,再创建触发器测试:(4) 在 JXGL 数据库中创建一触发器,
13、当有学生选了某门课时,不能从 C 表中删除 同样的,先复制C课程表再复制学生选课表:创建触发器:测试:成功该课程。 4 实验总结 整个实验做下来困难重重啊!因为这些平时使用的不是很多,所以用起来很生疏,特别是触发器的使用的更少,这还是从头开始学了。Oracle也挺烦的,这么麻烦。以下是遇见的部分错误与感受,重要的都记下了,方便以后查看。1、创建存储过程出错用show error语句查看错误信息:2、执行存储过程时报错:查看当时创建存储过程的是输出顺序和选择顺序便知道了,Sage和Ssex反了改了后执行,也不是,再XX。其实原因是oracle不能直接这样显示多行数据,必须返回一个数据集,则改变语句后:3、创建触发器报错:解决办法:再复制一份表到其他的用户下面,比如system后来就可以了。4、创建触发器2:报错不能有子查询解决办法:统计SC学生选课表中该门课程的选课数目,如果选课数目大于0说明有学生选了,则不能删除于是新问题来了,看样子要把学生选课表也复制进来?结果成了,真想去屎,这说明触发器创建的时候也不能穿透用户关系啊!别人平时查询加上用户名前缀就行。真想说,这错误截图要超过实验内容了,这说明了什么。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1