Oracle存储过程和触发器基本操作.docx

上传人:b****5 文档编号:4400360 上传时间:2022-12-01 格式:DOCX 页数:14 大小:700.51KB
下载 相关 举报
Oracle存储过程和触发器基本操作.docx_第1页
第1页 / 共14页
Oracle存储过程和触发器基本操作.docx_第2页
第2页 / 共14页
Oracle存储过程和触发器基本操作.docx_第3页
第3页 / 共14页
Oracle存储过程和触发器基本操作.docx_第4页
第4页 / 共14页
Oracle存储过程和触发器基本操作.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

Oracle存储过程和触发器基本操作.docx

《Oracle存储过程和触发器基本操作.docx》由会员分享,可在线阅读,更多相关《Oracle存储过程和触发器基本操作.docx(14页珍藏版)》请在冰豆网上搜索。

Oracle存储过程和触发器基本操作.docx

Oracle存储过程和触发器基本操作

南华大学

计算机科学与技术学院

实验报告

(2012~2013学年度第二学期)

课程名称

Oracle高级数据库开发设计

实验名称

存储过程与触发器基本操作

 

姓名

学号

专业

班级

地点

教师

前提表脚本:

createtableS_RZ0122(

Snovarchar2(11)primarykey,

Snamevarchar2(20)notnull,

Ssexvarchar

(2)notnull,

Sagenumber

(2)notnull,

Sdeptvarchar(20)notnull

createtableC_RZ0122(

Cnovarchar2(20)primarykey,

Cnamevarchar2(20)notnull,

Ccreditnumber

(2)notnull

createtableSC_RZ0122(

Snovarchar2(11)notnull,

Cnovarchar2(20)notnull,

Scorenumber(3),

primarykey(Sno,Cno),

foreignkey(Sno)referencesS_RZ0122(Sno),

foreignkey(Cno)referencesC_RZ0122(Cno)

INSERTINTOS_RZ0122(Sno,Sname,Ssex,Sage,Sdept)VALUES(0811101,'李勇','男',21,'计算机系')

INSERTINTOS_RZ0122(Sno,Sname,Ssex,Sage,Sdept)VALUES(0811102,'刘晨','男',20,'计算机系')

INSERTINTOS_RZ0122(Sno,Sname,Ssex,Sage,Sdept)VALUES(0811103,'王敏','女',20,'计算机系')

INSERTINTOS_RZ0122(Sno,Sname,Ssex,Sage,Sdept)VALUES(0811104,'张小红','女',19,'计算机系')

INSERTINTOS_RZ0122(Sno,Sname,Ssex,Sage,Sdept)VALUES(0821101,'张立','男',20,'信息管理系')

INSERTINTOS_RZ0122(Sno,Sname,Ssex,Sage,Sdept)VALUES(0821102,'吴宾','女',19,'信息管理系')

INSERTINTOS_RZ0122(Sno,Sname,Ssex,Sage,Sdept)VALUES(0821103,'张海','男',20,'信息管理系')

INSERTINTOS_RZ0122(Sno,Sname,Ssex,Sage,Sdept)VALUES(0831101,'钱小平','女',21,'通信工程系')

INSERTINTOS_RZ0122(Sno,Sname,Ssex,Sage,Sdept)VALUES(0831102,'王大力','男',20,'通信工程系')

INSERTINTOS_RZ0122(Sno,Sname,Ssex,Sage,Sdept)VALUES(0831103,'张珊珊','女',19,'通信工程系')

---增加课程信息脚本:

---

insertall

INSERTINTOC_RZ0122(Cno,Cname,Ccredit)VALUES('C001','高等数学',4)

INSERTINTOC_RZ0122(Cno,Cname,Ccredit)VALUES('C002','大学英语',3)

INSERTINTOC_RZ0122(Cno,Cname,Ccredit)VALUES('C003','大学英语',3)

INSERTINTOC_RZ0122(Cno,Cname,Ccredit)VALUES('C004','计算机文化学',2)

INSERTINTOC_RZ0122(Cno,Cname,Ccredit)VALUES('C005','VB',2)

INSERTINTOC_RZ0122(Cno,Cname,Ccredit)VALUES('C006','数据库基础',4)

INSERTINTOC_RZ0122(Cno,Cname,Ccredit)VALUES('C007','数据结构',4)

INSERTINTOC_RZ0122(Cno,Cname,Ccredit)VALUES('C008','计算机网络',4)

select*fromC_RZ0122;

---增加关联学生和课程信息脚本:

---

INSERTALL

INSERTINTOSC_RZ0122(Sno,Cno,Score)VALUES(0811101,'C001',96)

INSERTINTOSC_RZ0122(Sno,Cno,Score)VALUES(0811101,'C002',80)

INSERTINTOSC_RZ0122(Sno,Cno,Score)VALUES(0811101,'C003',84)

INSERTINTOSC_RZ0122(Sno,Cno,Score)VALUES(0811101,'C005',62)

INSERTINTOSC_RZ0122(Sno,Cno,Score)VALUES(0811102,'C001',92)

INSERTINTOSC_RZ0122(Sno,Cno,Score)VALUES(0811102,'C002',90)

INSERTINTOSC_RZ0122(Sno,Cno,Score)VALUES(0811102,'C004',84)

INSERTINTOSC_RZ0122(Sno,Cno,Score)VALUES(0821102,'C001',76)

INSERTINTOSC_RZ0122(Sno,Cno,Score)VALUES(0821102,'C004',85)

INSERTINTOSC_RZ0122(Sno,Cno,Score)VALUES(0821102,'C005',73)

INSERTINTOSC_RZ0122(Sno,Cno,Score)VALUES(0821102,'C007',0)

INSERTINTOSC_RZ0122(Sno,Cno,Score)VALUES(0821103,'C001',50)

INSERTINTOSC_RZ0122(Sno,Cno,Score)VALUES(0821103,'C004',80)

INSERTINTOSC_RZ0122(Sno,Cno,Score)VALUES(0831101,'C001',50)

INSERTINTOSC_RZ0122(Sno,Cno,Score)VALUES(0831101,'C004',80)

INSERTINTOSC_RZ0122(Sno,Cno,Score)VALUES(0831102,'C007',0)

INSERTINTOSC_RZ0122(Sno,Cno,Score)VALUES(0831103,'C004',78)

INSERTINTOSC_RZ0122(Sno,Cno,Score)VALUES(0831103,'C005',65)

INSERTINTOSC_RZ0122(Sno,Cno,Score)VALUES(0831103,'C007',0)

selectSno,Cno,ScorefromSC_RZ0122;

一.实验题目

存储过程与触发器基本操作

二.实验要求

掌握对存储过程和触发器的创建、修改等基本操作。

3.实验步骤及过程

根据实验3创建的数据库及表,完成以下内容:

(1)在JXGL数据库中创建一存储过程并运行,从S表中查询所有女生的信息。

创建存储过程prWoman

执行存储过程prWoman

(2)在JXGL数据库中创建一存储过程并运行,从S表中根据学号查询并返回该学生的姓名和年龄。

创建存储过程

执行存储过程

(3)在JXGL数据库中创建一触发器,保证S表中学生的年龄在8-45岁之间。

触发器说明:

(触发器是特定事件出现的时候,自动执行的代码块。

类似于存储过程,触发器与存储过程的区别在于:

存储过程是由用户或应用程序显式调用的,而触发器是不能被直接调用的。

首次创建出错:

错误在下面,因为SYS用户所属的表中不能创建触发器,所以先复制了一份表到SYSTEM用户中,

再创建触发器

测试:

(4)在JXGL数据库中创建一触发器,当有学生选了某门课时,不能从C表中删除

同样的,先复制C课程表

再复制学生选课表:

创建触发器:

测试:

成功

该课程。

4.实验总结

整个实验做下来困难重重啊!

因为这些平时使用的不是很多,所以用起来很生疏,特别是触发器的使用的更少,这还是从头开始学了。

Oracle也挺烦的,这么麻烦。

以下是遇见的部分错误与感受,重要的都记下了,方便以后查看。

1、创建存储过程出错

用showerror语句查看错误信息:

2、执行存储过程时报错:

查看当时创建存储过程的是输出顺序和选择顺序便知道了,Sage和Ssex反了

改了后执行,也不是,再XX。

其实原因是oracle不能直接这样显示多行数据,必须返回一个数据集,则改变语句后:

3、创建触发器报错:

解决办法:

再复制一份表到其他的用户下面,比如system

后来就可以了。

4、创建触发器2:

报错不能有子查询

解决办法:

统计SC学生选课表中该门课程的选课数目,如果选课数目大于0说明有学生选了,则不能删除

于是新问题来了,看样子要把学生选课表也复制进来?

结果成了,真想去屎,,,这说明触发器创建的时候也不能穿透用户关系啊!

别人平时查询加上用户名前缀就行。

真想说,这错误截图要超过实验内容了,这说明了什么。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1