存储过程与触发器实验.docx
- 文档编号:24800519
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:10
- 大小:378.91KB
存储过程与触发器实验.docx
《存储过程与触发器实验.docx》由会员分享,可在线阅读,更多相关《存储过程与触发器实验.docx(10页珍藏版)》请在冰豆网上搜索。
存储过程与触发器实验
第一章存储过程与触发器实验
实验目的
1.理解存储过程的工作原理和作用。
2.掌握存储过程设置和程序设计过程。
3.理解触发器的工作原理和作用。
4.掌握触发器编写方法。
实验环境
采用IBMDB2或Sybase数据库管理系统作为实验平台。
其中,DB2可以采用DB2Express-C或DB2V8Enterprise。
实验完成人:
李肇臻,谢锦
实验内容
一、存储过程实验
1.针对下面2个完整性约束条件,建立存储过程,实现当数据导入或更新时,可以自动修改拥塞率、半速率话务量比例
(1)拥塞率 = 拥塞数量/呼叫数量
(2)半速率话务量比例 = 半速率话务量/全速率话务量
在DB2CMD中运行,win7用管理员权限。
createprocedureM()
languageSQL
begin
updateCALLDATA
set"callcongs"="congsnum"/"callnum"
where"congsnum"<>0and"callnum"<>0;
updateCALLDATA
set"rate"="thtraff"/"traff"
where"thtraff"<>0and"traff"<>0;
end@
2.将存储过程添加到数据库服务器上
3.在客户端编写调用存储过程的主程序
4.运行客户端程序,调用存储过程,观察存储过程执行过程和数据更新情况;调用就用db2CALLM()
二、触发器实验
1.针对下列约束条件,分别建立1个触发器:
1)每个小区/扇区最多占用14个TCH频点,合法频点范围在[1,60]之间。
当向小区中新加入频点时,如果小区中现有频点数目已达到14个,则用新加入的频点替换现有频点中的最小频点;当修改或新加入频点时,如果发现频点不在合法范围内,则输出提示信息,并拒绝该操作。
createtriggerfirst_1afterinsertonFREQUENCY
referencingnewrowasnrow
foreachrow
when(nrow."CellID"in(select"CellID"
fromFREQUENCY
groupby"CellID"
having
count("Freq")=15))deletefromFREQUENCYwhere(("CellID","Freq")in(select"CellID",min("Freq")fromFREQUENCYwhere("CellID"=nrow."CellID"and"Freq"<>nrow."Freq")groupby"CellID"))
createtriggerfirst_2beforeinsertonFREQUENCY
referencingnewrowasnrow
foreachrow
when(nrow."Freq"<1ornrow."Freq">60)
signalsqlstate'80001'setmessage_text='Freq不合法';
createtriggerfirst_3beforeupdateonFREQUENCY
referencingnewrowasnrow
foreachrow
when(nrow."Freq"<1ornrow."Freq">60)
signalsqlstate'80001'setmessage_text='FREQ不合法';
2)每个小区有且只能有一个BCCH频点,合法范围在[70-90]之间。
当修改或新加入BCCH频点时,如果发现频点不在合法范围内,则输出提示信息,并拒绝该操作。
createtriggersecond_1beforeinsertonCELL
referencingnewrowasnrow
foreachrow
when((selectcount("Bcch")
fromCELL
where"CellID"=nrow."CellID")=1
or(nrow."Bcch">90ornrow."Bcch"<70))
signalsqlstate'80001'setmessage_text='Bcch不合法';
createtriggersecond_2beforeinsertonCELL
referencingnewrowasnrow
foreachrow
when(nrow."Bcch">90ornrow."Bcch"<70)
signalsqlstate'80001'setmessage_text='Bcch不合法';
createtriggersecond_3beforeupdateonCELL
referencingnewrowasnrow
foreachrow
when(nrow."Bcch">90ornrow."Bcch"<70)
signalsqlstate'80001'setmessage_text='Bcch不合法'
3)每个小区与其邻小区的BCCH不允许相同。
当修改某小区的BCCH频点值时,如果发现修改后与其它邻区的BCCH频点相同,则则输出提示信息,并拒绝该操作。
createtriggerthree_1afterupdateonCELL
referencingnewrowasnrow
foreachrow
when(nrow."Bcch"
in
(select"Bcch"
fromCELL,NEIGHBOR
wherenrow."CellID"="AdjcellID")
)
signalsqlstate'80001'setmessage_text='Bcch修改不合法';
2.将触发器添加到数据库服务器上
3.向数据库添加新的TCH、BCCH频点数据,或修改已有TCH、BCCH频点数据,观察当违反上述3条约束时,触发器的执行情况。
第一题:
插入一个大于60的频点:
insertintoFREQUENCY
values(9012,89);
第二题:
updateCELL
set"Bcch"=99
where"CellID"=9011
第三题:
9152有个相邻小区9031,9031的Bcch是70.
updateCELL
set"Bcch"=70
where"CellID"=9152
实验总结
初步了解了存储过程的作用,并尝试编写一个存储过程,了解触发器的工作原理,更深入的掌握触发器的编写方法。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 存储 过程 触发器 实验