存储过程与触发器实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一章存储过程与触发器实验

实验目的

1.理解存储过程的工作原理和作用。

2.掌握存储过程设置和程序设计过程。

3.理解触发器的工作原理和作用。

4.掌握触发器编写方法。

实验环境

采用IBM DB2或Sybase数据库管理系统作为实验平台。其中,DB2可以采用DB2 Express-C或DB2 V8 Enterprise。

实验完成人:李肇臻,谢锦

实验内容

一、存储过程实验

1.针对下面2个完整性约束条件,建立存储过程,实现当数据导入或更新时,可以自动修改拥塞率、半速率话务量比例

(1)拥塞率=拥塞数量/呼叫数量

(2)半速率话务量比例=半速率话务量/全速率话务量

在DB2CMD中运行,win7用管理员权限。

create procedure M()

language SQL

begin

update CALLDATA

set "callcongs"="congsnum"/"callnum"

where "congsnum"<>0 and "callnum"<>0;

update CALLDATA

set "rate"="thtraff"/"traff"

where "thtraff"<>0 and "traff"<>0;

end @

2.将存储过程添加到数据库服务器上

3.在客户端编写调用存储过程的主程序

4.运行客户端程序,调用存储过程,观察存储过程执行过程和数据更新情况;调用就用db2 CALL M()

二、触发器实验

1. 针对下列约束条件,分别建立1个触发器:

1)每个小区/扇区最多占用14个TCH频点,合法频点范围在[1,60]之间。当向小区中新加入频点时,如果小区中现有频点数目已达到14个,则用新加入的频点替换现有频点中的最小频点;当修改或新加入频点时,如果发现频点不在合法范围内,则输出提示信息,并拒绝该操作。

create trigger first_1 after insert on FREQUENCY

for each row

when(nrow."CellID" in(select "CellID"

from FREQUENCY

group by "CellID"

having

count("Freq")=15))

delete from FREQUENCY

where(("CellID","Freq") in(select "CellID",min("Freq")

from FREQUENCY

where("CellID"=nrow."CellID" and "Freq" <>nrow."Freq")

group by "CellID"))

create trigger first_2 before insert on FREQUENCY

referencing new row as nrow

for each row

when

(

nrow."Freq"<1 or nrow."Freq">60

)

signal sqlstate '80001' set message_text='Freq不合法';

create trigger first_3 before update on FREQUENCY

referencing new row as nrow

for each row

when

(

nrow."Freq"<1 or nrow."Freq">60

)

signal sqlstate '80001' set message_text='FREQ不合法';

2)每个小区有且只能有一个BCCH频点,合法范围在[70-90]之间。当修改或新加入BCCH 频点时,如果发现频点不在合法范围内,则输出提示信息,并拒绝该操作。

create trigger second_1 before insert on CELL

for each row

when((select count("Bcch")

from CELL

where "CellID"=nrow."CellID")=1

or (nrow."Bcch">90 or nrow."Bcch"<70))

signal sqlstate '80001' set message_text='Bcch不合法';

create trigger second_2 before insert on CELL

referencing new row as nrow

for each row

when( nrow."Bcch">90 or nrow."Bcch"<70 )

signal sqlstate '80001' set message_text='Bcch不合法';

create trigger second_3 before update on CELL

referencing new row as nrow

for each row

when( nrow."Bcch">90 or nrow."Bcch"<70 )

signal sqlstate '80001' set message_text='Bcch不合法'

3)每个小区与其邻小区的BCCH不允许相同。当修改某小区的BCCH频点值时,如果发现修改后与其它邻区的BCCH频点相同,则则输出提示信息,并拒绝该操作。

create trigger three_1 after update on CELL

referencing new row as nrow

for each row

when(nrow."Bcch"

in

(select "Bcch"

from CELL,NEIGHBOR

where nrow."CellID"="AdjcellID")

)

signal sqlstate '80001' set message_text='Bcch修改不合法';

2.将触发器添加到数据库服务器上

相关文档
最新文档