数据库原理游标及触发器实验
触发器与游标详解

创建触发器为了演示触发器的功能,下面再引入一个简易仓库管理的例子。
在采购配件前,必须首先制定采购计划(如采购计划表 PlanA),然后交由采购员采购,采购回来后,要将配件入库,入库时,除了要修改入库表(配件入库表 InStock)外,还要修改配件库存表(仓库库存表 Stock),还要修改采购计划表(采购计划表 PlanA),因为要修改实际完成的采购量(FinishQty)。
三个数据表如下:采购计划表 PlanA备件入库表 InStock备件库存表 Stock给计划表追加如下数据一、用企业管理器创建触发器例1:对备件入库InStock表建立一个插入触发器utr_InStockIns,其功能为:备件入库时,除了要将入库数据追加到备件入库表(InStock)外,还要修改计划表(PlanA)中对应计划号的完成数量(增加FinishQty)和备件库存表(Stock)中对应备件代码的库存数量(StockQty)。
注:同企业管理器创建的触发器例2:对备件入库表建立一个删除触发器utr_InStockDel,其功能为:删除备件入库中的记录时,除了要删除入库表(InStock)的记录外,还要修改计划表(PlanA)中对应计划号的完成数量(减少FinishQty),还要删除备件库存表(Stock)中对应备件代码的记录。
例3:对备件入库表建立一个更改除触发器utr_InStockUpt,其功能为:更改备件入库中的记录时,除了要更改入库表(InStock)的记录外,还要更改备件库存表(Stock)中对应备件代码的数据,同时,还要更改计划表(PlanA)中对应计划号的完成数量(FinishQty)。
触发器的应用假设你已经按照4.2.3创建触发器中要求创建了插入触发器utr_InStockIns、删除触发器utr_InStockDel和更改触发器utr_InStockUpt,才能做下面的实验。
可以参见4.2.4管理触发器来检查是否已经创建。
数据库游标实验报告

计算机系一、实验目的1、掌握创建游标的方法和步骤;2.掌握游标的使用方法;二、实验内容1、游标的创建;2、游标的使用方法。
三、实验步骤1、游标的创建。
1)使用S_C数据库中的S表、C表、SC表创建一个存储过程—sp_CURSOR1。
该存储过程的作用是:显示所有的课程信息,如果成绩>=90显示成绩本身;成绩>=80显示良;成绩>=70显示中;成绩>=60显示及格;成绩>=0显示不及格;如果没有成绩则显示无成绩。
信息还包含学号,姓名,课程和成绩,显示格式如下:学号---姓名---课程---成绩,如图1所示。
要求使用游标技术实现上述要求,使用Print语句实现显示。
图1 成绩显示格式sp_CURSOR1的创建语句:create proc sp_CURSOR1asDeclare @sname varchar(50)Declare @sno varchar(20)Declare @cno varchar(20)Declare @cname varchar(20)Declare @grade varchar(20)Declare SCursor Cursor ForSelect sno,cno,grade From SCOpen SCursorFetch Next From SCursor Into @sno,@cno,@gradeWhile@@FETCH_STATUS= 0beginselect @sname=sname From S where sno=@snoselect @cname=cname From C where cno=@cnoif(@grade ='')Print @sno+@sname+@cname+'null'else if(@grade >= 90)Print @sno+@sname+@cname+@gradeelse if(@grade >=80)Print @sno+@sname+@cname+'良'else if(@grade >=70)Print @sno+@sname+@cname+'中'else if(@grade >=60)Print @sno+@sname+@cname+'及格'elsePrint @sno+@sname+@cname+'不及格'Fetch Next From SCursor Into @sno,@cno,@gradeEndClose SCursorDeallocate Scursorgo结果描述:2、游标的使用。
数据库,触发器实验报告

数据库,触发器实验报告数据库系统实验报告触发器实验4 触发器1、通过序列和触发器实现借阅表中借阅流水号字段的自动递增。
Create or replace sequence bwnum_idMinvalue 1Maxvalue 1.0E28Start with 1Increment by 1Cache 20;Create or Replace Triggertri_bwnum_idBefore Insert On borrowFor Each RowBeginSelect bwnum_id.NextvalInto :new.bwnumFrom DUAL;End;2、通过序列和触发器实现预约表中预约流水号字段的自动递增Create sequence pnum_idMinvalue 1Maxvalue 1.0E28Start with 1Increment by 1Cache 20;Create or Replace Triggertri_pnum_idBefore Insert On preborrowFor Each RowBeginSelect pnum_id.NextvalInto :new.pnumFrom DUAL;End;3、修改实验三借书功能的存储过程。
该存储过程要求:(1)借书时输入借书证号,图书编号。
(即该函数有2个输入参数)(2)借书时,借书日期为系统时间。
*该存储过程主体部分只有insert into语句。
create or replace Procedurep_borrow(P_BNUM IN BORROW.BNUM%TYPE,P_RNUM IN BORROW.RNUM%TYPE)asbegininsertinto BORROW (BNUM,RNUM,BDATE)values(P_BNUM,P_RNUM,TO_CHAR( SYSDATE(),'YY/MM/DD'));commit;end;4、建立与借书存储过程相对应的触发器,当借阅表中加入借阅信息时,该触发器触发,自动修改所借图书的是否借出改为‘是’。
数据库《游标的使用》实验报告

x x大学计算机与信息技术学院实验报告姓名学号专业班级课程名称数据库系统概论实验日期成绩指导教师批改日期实验名称游标的使用一、实验目的:•掌握游标的使用方法•掌握使用游标逐行操作SELECT语句结果集的数据的技能二、实验内容:•游标声明•打开游标•读取数据•关闭游标•释放游标三、实验步骤:(一)使用游标的几个步骤:1、声明游标。
使用T-SQL语句生成一个结果集,并且定义游标的特征,如游标中的记录是否可以修改;2、打开游标3、推进游标指针,从游标的结果集中提取数据,从游标中检索一行或多行数据成为提取数据。
4、逐行处理游标指针所指向的行数据。
5、关闭和释放游标。
例1、利用标准方式声明一个名称为“student”的游标use 学生选课declare student cursorforselect Sno,Sname,sageFROM studentWHERE sage=19FOR READ ONLYGOopen student // 打开gofetch next from student //从游标中读取数据goclose student // 关闭deallocate student // 删除例2:声明一个名称为Xuanke的游标use 学生选课/*声明一个名称为Xuanke的游标*/ DECLARE XUANKE CURSOR DYNAMIC /*动态的,动力的*/ FORSELECT Sno,GradeFROM SCWHERE Cno='1'FOR UPDATE OF SnoGO/*打开XUANKE游标*/OPEN XUANKEGO/*从XUANKE游标中读取数据*/ FETCH NEXT FROM XUANKEGO/*关闭XUANKE游标*/CLOSE XUANKE/*删除XUANKE游标*/ DEALLOCATE XUANKE例3:声明一个游标,可前后滚动,可对选课表2中的成绩进行修改use 学生选课/*声明一个游标,可前后滚动,可对选课表中的成绩进行修改use 学生选课*/DECLARE XK CURSORFOR SELECT*FROM SCFOR UPDATE OF Grade/*打开游标XK*/OPEN XKSELECT'游标数据行数'=@@CURSOR_ROWS/*全局变量@@CURSOR_ROWS返回最后打开的游标中当前存在的合格行的数量。
触发器的实验原理

触发器的实验原理咱先得知道啥是触发器呢。
简单来说呀,触发器就像是一个超级警觉的小卫士。
你想啊,在一个电路的小世界里,或者在数据库这个大仓库里,它就在那静静地等着某个特定的事情发生。
就好比你在门口放了个小铃铛,只要有人一推门,铃铛就响,这个铃铛就有点像触发器的感觉呢。
在电路里呀,触发器是有自己独特的结构的。
它是由好多电子元件组合起来的。
比如说有逻辑门这些小家伙。
逻辑门就像是一群有着自己小脾气的小精灵。
它们有的只让电流通过的时候说“是”,有的则是在电流没有的时候说“是”,这些小精灵们互相配合着,就构建出了触发器的基本框架。
当输入的电信号有了某种变化的时候,就像你给这些小精灵们一个暗号一样,它们就会按照之前设定好的规则,让触发器的输出发生改变。
比如说从低电平变成高电平,或者反过来。
这就好像是小铃铛响了之后,屋里的小狗就开始汪汪叫,有了一个连锁的反应。
再说说数据库里的触发器。
数据库就像是一个超级大的信息宝库,里面存着各种各样的数据,就像宝藏一样。
那触发器在这呢,就是一个超级警觉的管理员。
比如说,当你在这个数据库里插入了一条新的数据,就像是你往宝库里放了一个新的宝贝。
这个时候,触发器就会被触发啦。
它可能会去检查这条新数据是不是符合某些规则。
要是不符合呢,它就会像个小管家一样,跳出来说“不行不行,这个数据有点问题呢。
”然后可能会阻止这个数据的插入,或者对这个数据进行一些修改,让它变得符合要求。
这就像是宝库有自己的规矩,不是啥东西都能随便放进去的。
那触发器是怎么知道什么时候该干活呢?这就涉及到触发的条件啦。
在电路里,这个条件可能是电压达到了某个值,或者是电流的变化方式符合了设定的模式。
就像是小铃铛只有在门被推开到一定角度的时候才会响。
在数据库里呢,这个触发条件可能是对某个表进行了特定的操作,像插入、删除或者修改数据。
这就像是宝库的管理员规定了,只有在有人拿了某个特定的宝物或者往某个特定的地方放宝物的时候,他才会出来检查。
MySQL中触发器和游标的介绍与使用

MySQL中触发器和游标的介绍与使⽤触发器简介触发器是和表关联的特殊的存储过程,可以在插⼊,删除或修改表中的数据时触发执⾏,⽐数据库本⾝标准的功能有更精细和更复杂的数据控制能⼒。
触发器的优点:安全性:可以基于数据库的值使⽤户具有操作数据库的某种权利。
例如不允许下班后和节假⽇修改数据库数据;审计:可以跟踪⽤户对数据库的操作;实现复杂的数据完整性规则。
例如,触发器可回退任何企图吃进超过⾃⼰保证⾦的期货;提供了运⾏计划任务的另⼀种⽅法。
例如,如果公司的帐号上的资⾦低于 5 万元则⽴即给财务⼈员发送警告数据。
MySQL 中使⽤触发器创建触发器创建触发器的技巧就是记住触发器的四要素:监控地点:table;监控事件:insert/update/delete;触发时间:after/before;触发事件:insert/update/delete。
创建触发器的基本语法如下所⽰:CREATE TRIGGER-- trigger_name:触发器的名称;-- tirgger_time:触发时机,为 BEFORE 或者 AFTER;-- trigger_event:触发事件,为 INSERT、DELETE 或者 UPDATE;trigger_name trigger_time trigger_eventON-- tb_name:表⽰建⽴触发器的表名,在哪张表上建⽴触发器;tb_name-- FOR EACH ROW 表⽰任何⼀条记录上的操作满⾜触发事件都会触发该触发器。
FOR EACH ROW-- trigger_stmt:触发器的程序体,可以是⼀条 SQL 语句或者是⽤ BEGIN 和 END 包含的多条语句;trigger_stmttrigger_name:触发器的名称;tirgger_time:触发时机,为 BEFORE 或者 AFTER;trigger_event:触发事件,为 INSERT、DELETE 或者 UPDATE;tb_name:表⽰建⽴触发器的表名,在哪张表上建⽴触发器;trigger_stmt:触发器的程序体,可以是⼀条 SQL 语句或者是⽤ BEGIN 和 END 包含的多条语句;FOR EACH ROW 表⽰任何⼀条记录上的操作满⾜触发事件都会触发该触发器。
数据库原理实验指导书(含触发器及存储过程)范文

数据库原理实验指导实验 1 SQL Server2000管理工具的使用一、目的与要求1.掌握SQL Server服务器的安装2.掌握企业管理器的基本使用方法3.掌握查询分析器的基本使用方法4.掌握服务管理器的基本使用方法5.对数据库及其对象有一个基本了解6.掌握用企业管理器和查询分析器创建数据库,修改数据库和删除数据库的方法。
二、实验准备1.了解SQL Server各种版本安装的软、硬件要求2.了解SQL Server支持的身份验证模式3.了解SQL Server各组件的主要功能4.对数据库、表和数据库对象有一个基本了解5.了解在查询分析器中执行SQL语句的方法三、实验内容1.安装SQL Server 2000 根据软硬件环境,选择一个合适版本的SQL Server 2000。
2.利用企业管理器访问系统自带的pubs数据库。
(1)启动SQL Server服务管理器。
通过“开始=>程序=>Microsoft SQL Server=>服务管理器”打开“SQL Server服务管理器”,启动“SQL Server服务管理器”,并记录当前运行的服务器名。
图1.1 启动SQL Server服务管理器(2)启动企业管理器。
通过“开始=>程序=>Microsoft SQL Server=>企业管理器”打开“SQL Server Enterprise Manager”图1.2 启动企业管理器(3)在企业管理器的树形目录中展开数据库,找到pubs并展开,则列出该数据库的所有对象,如表、视图、存储过程、默认和规则等。
(4)选中“表”,将列出pubs数据库的所有表(包括系统表和用户表),在此以用户表publishers为例,选中该表,单击鼠标右键,弹出快捷菜单,执行“打开表—返回所有行”菜单项,打开该表,查看其内容。
(5)在表的尾部插入记录(9943,zhang,Beijing,null,china)和记录(1408,li,shanghai,null,china)。
触发器实验报告

触发器实验报告一、实验目的1.1 探索触发器的基本原理触发器,简单来说,就是一个能在特定条件下改变状态的电路。
它就像一扇门,只有当你用力去推的时候,才会打开。
我们的目标是搞清楚这些“门”是如何工作的。
1.2 理解触发器在电路中的应用触发器的应用范围可广泛了。
无论是数据存储,还是控制逻辑,触发器都扮演着关键角色。
它们就像是信息的守门员,决定了什么能进,什么得被拒绝。
二、实验设备2.1 实验工具这次实验,我们用的是基本的逻辑电路组件。
包括电源、开关、LED灯,还有万用表。
这些东西就像是我们的小工具箱,缺一不可。
2.2 触发器模块我们选择了D型触发器,因其结构简单,易于理解。
它的工作原理就像是一个小孩的玩具,按一下按钮就会亮灯,放开就灭。
我们把它接入电路,准备好迎接它的“表现”。
2.3 安全措施在进行实验之前,安全可不能马虎。
我们确保电源关闭,检查所有连接,确保一切正常。
毕竟,安全第一,任何小失误都可能引发“大麻烦”。
三、实验过程3.1 连接电路首先,我们根据电路图连接所有元件。
小心翼翼地将电缆接入D型触发器。
电缆像是我们的手,仔细地操控每一个连接。
看到电路成形,心中有种莫名的期待。
3.2 测试触发器一切准备好后,开启电源。
按下开关,LED灯瞬间亮起。
那一刻,仿佛看到了触发器在欢呼。
又按一下,灯灭了,状态变化真是瞬息万变。
就像生活,时刻都在变化,让人惊喜。
3.3 数据记录我们开始记录每次实验的结果。
数据像是我们收集到的“宝藏”,每一组数字都有它的故事。
这种追踪过程,就像是在解谜,寻找背后的秘密。
四、实验结果4.1 状态变化通过几轮实验,我们观察到触发器在不同输入条件下的状态变化。
每一次按下开关,触发器都准确无误地改变状态,表现得相当稳定。
这让我想起一句话:“坚持就是胜利”。
4.2 误差分析当然,实验中也不是没有波折。
偶尔会出现状态不一致的情况。
这就引发了我们的讨论,究竟是接线问题,还是外部干扰。
最终,我们发现是接触不良导致的,改正后,一切恢复正常。
数据库原理游标及触发器实验Word版

《数据库原理》实验报告要求报告的主要内容一、实验目的根据各实验项目的实验目的撰写,具体在附件中给出。
二、实验环境操作系统:Windows XP,数据库管理系统(DBMS):SQL Server2008三、实验要求根据各实验项目要求撰写,具体在附件中给出。
四、实验内容及完成情况自己所完成的内容,进行了哪些操作、编写了哪些程序及执行后的结果,包括一些错误结果及解决办法等。
五、实验体会具体要求1、本实验属综合性实验,要使用学校统一的报告纸,附加纸张要挟在报告纸内并左侧装订;2、报告纸的封面要填写完整,项目要与实验日历中的项目完全一致,否则将返回重写;3、报告第四项“实验内容及完成情况”中,只允许对操作结果和程序运行结果进行打印,其余内容必须用钢笔或水性笔书写,报告要整洁;4、严禁出现雷同报告,如果出现雷同,雷同报告的所有学生本次实验将作不及格或最低分处理。
如果出现不及格实验项目将取消考试资格。
实验目的及要求实验三、存储过程及游标实验目的:综合运用程序设计和数据结构,使用游标完成具有较完整功能的存储过程。
实验要求:根据所给的excel表格,完成实验内容。
说明:“招生表”中部分属性保存的是代码值,请按所给代码表完成如下要求。
1.使用SQL语句创建数据库,并在数据库中完成表的创建。
(报告中要分析各个表的主键和外键是什么)创建数据库studentManage2.写一个存储过程,功能是查询所有招生信息。
使用游标完成逐行输出,每行要有行号。
(在查询结果中,要求各类代码要替换成具体的文字信息,例如:政治面貌不要显示“01”,而要显示“中共党员”。
)3.写一个触发器,当“录取专业代码-名称”表的“代码”发生变动时,“招生表”中对应的信息也要修改,来维护数据的一致性。
(注:可编辑下载,若有不当之处,请指正,谢谢!)。
数据库实验八:触发器及应用

数据库实验八:触发器及应用一、实验目的与要求:1.实验目的(1)学习触发器的使用,加深对触发器功能和作用的理解。
(2)体会触发器执行的时机。
2.实验要求建立如下的存储过程(基于前面实验建立的表和插入的数据,并为每个存储过程设计返回的状态值):(1)为选课表分别建立插入和更新触发器,如果当前学生累计不及格门数达到5则给出警示信息。
(2)为课程表分别建立插入和更新触发器来建立约束规则:“专业基础”课的教师必须为“教授”或“副教授”,如果不满足约束则拒绝操作,并给出错误信息。
(3)自行再分别设计2~3个触发器(在实验报告中要准确描述功能需求)。
(4)设计并执行相关的操作,体会DML触发器的效果和作用。
二、实验内容1、实验原理建立触发器的语句是:CREATE TRIGGER [schema_name].trigger-nameON {table |view}FOR {INSERT | UPDATE | DELETE }AS[IF UPDATE (column) [{AND | OR} UPDATE (column)…]]sql-statement2、实验步骤与结果(1)调出SQL Server2005软件的用户界面,进入SQL SERVER MANAGEMENT STUDIO。
(2)输入自己编好的程序。
(3)检查已输入的程序正确与否。
(4)运行程序,并分析运行结果是否合理和正确。
在运行时要注意当输入不同的数据时所得到的结果是否正确。
(5)输出程序清单和运行结果。
(1)为选课表分别建立插入和更新触发器,如果当前学生累计不及格门数达到5则给出警示信息。
插入触发器:create trigger xk_triggeron选课for insertasdeclare@amount int,@xh char(10)select@xh=学号from insertedif@xh is not nullbeginselect@amount=(select count(*)from选课where成绩<60 and学号=@xh)if@amount>=5beginraiserror('不及格达到5门',16,10)endendinsert into选课values('001','03','50')insert into选课values('001','02','50')insert into选课values('001','04','50')更新触发器:create trigger xk_trigger2on选课for updateasdeclare@amount int,@xh char(10)select@xh=学号from insertedif@xh is not nullbeginselect@amount=(select count(*)from选课where成绩<60 and学号=@xh) if@amount>=5beginraiserror('不及格达到5门',16,10)endendupdate选课set成绩=50 where学号='001'and课程编号='02'update选课set成绩=50 where学号='001'and课程编号='03'update选课set成绩=50 where学号='001'and课程编号='04'update选课set成绩=50 where学号='001'and课程编号='05'update选课set成绩=50 where学号='001'and课程编号='06'(2)为课程表分别建立插入和更新触发器来建立约束规则:“专业基础”课的教师必须为“教授”或“副教授”,如果不满足约束则拒绝操作,并给出错误信息。
触发器实验报告

触发器实验报告一、实验目的本次实验的主要目的是深入了解和掌握触发器的工作原理、功能特性以及在数字电路中的应用。
通过实际操作和观察,增强对触发器逻辑行为的直观认识,提高电路设计和故障排查的能力。
二、实验设备和材料1、数字电路实验箱2、示波器3、逻辑分析仪4、各种集成触发器芯片(如 D 触发器、JK 触发器等)5、电阻、电容、导线若干三、实验原理1、触发器的定义和分类触发器是一种能够存储一位二进制信息的基本单元电路,根据其逻辑功能的不同,可分为 D 触发器、JK 触发器、T 触发器和 SR 触发器等。
2、 D 触发器D 触发器在时钟脉冲 CP 的上升沿(或下降沿)将输入数据 D 锁存到输出端 Q。
其逻辑表达式为:Q(n+1) = D。
3、 JK 触发器JK 触发器具有置0、置1、保持和翻转四种功能。
当J=1,K=0 时,在时钟脉冲作用下触发器置 1;当 J=0,K=1 时,触发器置 0;当J=K=0 时,触发器保持原态;当 J=K=1 时,触发器翻转。
其逻辑表达式为:Q(n+1) =JQ(n)’ +K’Q(n)。
4、触发器的触发方式触发器的触发方式分为边沿触发和电平触发。
边沿触发是指在时钟脉冲的上升沿或下降沿触发,而电平触发是指在时钟脉冲为高电平或低电平时触发。
边沿触发方式可以有效地避免空翻现象,提高电路的可靠性。
四、实验内容和步骤1、 D 触发器实验(1)按照实验电路图,在实验箱上连接好 D 触发器电路,将输入信号 D 接逻辑电平开关,时钟信号 CP 接脉冲信号源。
(2)通过改变输入信号 D 的电平状态和时钟信号 CP 的脉冲,用示波器观察输出端 Q 和Q’的波形,并记录下来。
(3)分析输出波形与输入信号之间的关系,验证 D 触发器的逻辑功能。
2、 JK 触发器实验(1)类似地,连接好 JK 触发器电路,将 J、K 输入端分别接逻辑电平开关,时钟信号 CP 接脉冲信号源。
(2)设置不同的 J、K 输入组合,观察输出端 Q 和Q’的波形,并记录。
数据库系统原理实验: 存储过程与游标

实验七 T-SQL程序设计与游标设计一、实验目的1.掌握Transact-SQL语言极其程序设计的方法;2.掌握T-SQL游标的使用方法。
二、实验内容与要求1.T-SQL程序设计逻辑Transact-SQL是SQL Server对标准SQL语言的扩充。
Transact-SQL是SQL Server对标准sQI.语言的扩充。
它引入了程序设计的思想,增加了程序的流程控制语句。
Transact-SQL语言最主要的用途是设计服务器端的能够在后台执行的程序块,如存储过程、触发器等。
(1)变量Transact-SQL中可以使用两种变量:局部变量和全局变量。
局部变量。
局部变量是用户可自行定义的变量,它的作用范围是在程序内部,一般用来存储从表中查询到的数据,或作为程序执行过程中的暂存变量。
局部变量必须以@开头,且必须先用DECLARE命令加以说明后才可使用。
全局变量。
全局变量是SQL Server系统内部使用的变量,其作用范围并不局限于某一程序,而是所有程序都可随时调用。
全局变量通常存储一些SQL Server的配置设定值和效能统计数据。
引用全局变量必须以@@开头。
(2)流程控制命令BEGIN…ENDIF…ELSE…CASEWHILE…CONTINUE…BREAKWAITFORGOTORETURN(3)其他命令BACKUP.CHECKPOINT.DBCC.DECLARE.EXECUTE.KILL.PRINT.RAISERROR.READTEXT.RESTORE.SELECT.SET.SHUTDOWi\l.WRITETEXT.USE.(4)常用函数统计函数算术函数字符串函数数据类型转换函数日期函数TEXT函数和IMAGE函数用户自定义函数1.1计算1—100之间所有能被3整除的数的个数和总和(1)启动SSMS。
(2)创建T-SQL程序:在查询编辑器窗口中输入下列程序:DECLARE @SUM SMALLINT, @I SMALLINT, @NUMS SMALLINTSET @SUM=0SET @I=1SET @NUMS=0WHILE (@I<=100)BEGINIF (@I%3=0 )BEGINSET @SUM=@SUM+@ISET @NUMS=@NUMS+1ENDSET @I=@I+1ENDPRINT '总和是:' + STR( @SUM )PRINT '个数是:' + STR( @NUMS )(3)执行T-SQL,执行结果如图1-1所示。
触发器实验报告总结

篇一:触发器及其应用实验报告学生实验报告篇二:数据库实验3 触发器报告数据库专题训练------触发器实验报告系别:计算机科学与技术班级:计11-3班姓名:黄娟娟学号:11101020324成绩:评语:指导教师签字:日期:实验二触发器一、实验环境及要求触发器是一种特殊的存储过程,不能被用户直接调用。
可以包含复杂的 sql语句。
在特定事件发生时自动触发执行,通常用于实现强制业务规则和数据完整性。
dml触发器分为两种类型:after 触发器和 instead of触发器。
通过本次实验掌握触发器的创建方法以及使用方法。
二、实验步骤及结果1) 创建一个名为tri_insert_s的触发器,测试改触发器的执行情况,并给出实验结果。
当插入的新记录中sage 的值不是18至25之间的数值时,就激活该触发器,撤销该插入操作,并给出错误提示。
use sxcjgocreate trigger tri_insert_s on safter insertasif exists (select * from insertedwheresage>=18 and sage<=25)print添加成功! elsebeginprint无法添加! rollbacktransactionendgoinsert into s values(s8,黄丽,女,26,计算机)insert into s values(s8,黄丽,女,20,计算机)select *from sgo显示如下:insert into s values(s8,黄丽,女,26,计算机)insert into s values(s8,黄丽,女,20,计算机)2)创建一个名为tri_update_sc的触发器,要求:(1)首先判断数据库中是否已经存在名为tri_update_sc的触发器,如果存在,首先删除,再创建。
(2)当试图修改sc表中的学生成绩时,给出不能随便修改成绩的信息提示。
数据库编程技术——游标、存储过程与触发器

实验八数据库编程技术—游标、存储过程与触发器一、实验目的1.掌握游标的定义和使用方法2.掌握存储过程的定义、执行和调用方法3.掌握游标和存储过程的综合应用方法。
4.掌握触发器的创建和使用方法。
5.掌握游标和触发器的综合应用方法。
二、实验环境(实验的软件、硬件环境)硬件:PC机软件:SQL2000三、实验指导说明请复习第八章数据库编程的相关知识,完成如下的实验内容。
四、实验内容(1)利用游标查找所有女业务员的基本情况(2)创建一游标,逐行显示表customer的记录,要求按‘客户编号’+‘-------’+‘客户名称’+‘-------’+‘客户地址’+‘-------------------’+‘客户电话’+‘----------’+‘客户邮编’+‘--------’格式输出,并且用while 结构来测试游标的函数@@Fetch_Status的返回值。
(3)利用游标修改orderMaster表中的Ordersum的值(4)利用游标显示出orderMaster表中每一个订单所对应的明细数据信息。
(5)利用存储过程,给Employee表添加一条业务部门员工的信息。
(6)利用存储过程输出所有客户姓名、客户订购金额及其相应业务员的姓名(7)利用存储过程查找某员工的员工编号、订单编号、销售金额。
(8)利用存储过程查找姓“李”并且职称为“职员”的员工的员工编号、订单编号、销售金额(9)请使用游标和循环语句编写一个存储过程proSearchCustomer,根据客户编号,查询该客户的名称、地址以及所有与该客户有关的销售记录,销售记录按商品分组输出。
(10)设置一个触发器,该触发器仅允许dbo用户可以删除Employee表内数据,否则出错。
(11)在OrderMaster表中创建触发器,插入数据时要先检查Employee表中是否存在和Employee表同样值的业务员编号,如果不存在则不允许插入。
(12)级联更新:当更新customer表中的customerNo列的值时,同时更新OrderMaster表中的customerNo列的值,并且一次只能更新一行。
Oracle实验报告之触发器

实验报告实验名称:使用游标、存储过程和触发器实验课时:2课时实验地点:E305实验时间:2014年5月 21日星期三第14 周实验目的及要求:(1)了解游标的概念和工作原理。
(2)了解存储过程的分类和使用方法。
(3)了解触发器的概念。
(4)学习编写和执行自定义过程。
(5)学习创建和使用触发器。
实验环境:(1)硬件设备:PC机一台(2)操作系统:Windows XP(3)应用工具:Oracle 11g实验内容:(算法、程序、步骤和方法)(1)创建游标mycur,从表employees中读取1号部门的员工姓名,职务。
并输出“员工姓名:XXX,职务:XXX。
”程序代码如下:set serveroutput on;DECLARECURSOR mycur ISSELECT emp_name, titleFROM employeeswhere dep_id=1;BEGINFOR yw IN mycur LOOPdbms_output.put_line('员工姓名:'||yw.emp_Name||'职务:'||yw.title);END LOOP;END;执行结果如下:(2)创建存储过程GetGrade,查询指定员工的工资,使用CASE语句输出其工资等级。
工资小于等于3000,等级为“低”;工资大于3000,小于5000,等级为”中”;工资大于等于5000,等级为高。
并执行该存储过程。
创建存储过程代码如下:create or replace procedure getgrade(yw_depid number)asyw_wage employees.wage%type;yw_grade varchar2(5);beginselect wage into yw_wagefrom employeeswhere emp_id=yw_depid;yw_grade:=casewhen yw_wage<=3000 then '低'when yw_wage>=3000 and yw_wage<5000 then '中'when yw_wage>=5000 then '高'end;dbms_output.put_line('该员工工资等级为'||yw_grade);end;执行存储过程代码如下:execute getgrade(3);call getgrade(3);执行结果如下:(3)创建存储过程UpdateWage,查询指定员工的工资,如果工资小于3000,则加200工资,并提示信息“XX号员工工资已更新。
触发器及游标使用案例说明

数据库中游标的使用分类:数据库2013-01-02 16:00 674人阅读评论(5) 收藏举报说道游标,我想大家并不陌生。
但对于我们大多数初学者来说,就未必用过游标了。
下面我就以一个实际例子给大家说一下我们为什么要用游标、什么时候用、怎么用。
实例:某学校有多个班级,而每个班级里有多个学生。
现在我们要完成这样一件事,假如有一天,这个学校不存在了,那么属于这个学校的班级也就不存在了,同理,这些班里的学生也就不再属于这个班了。
需求明白了,我们开始建表,表结构如下:注:IsAvailable字段值为否时标明该条记录不存在。
为了实现上述功能,我们决定用触发器,于是在School表中建立触发器,具体语句如下:[sql]view plaincopyprint?1. CREATE TRIGGER [dbo].[UpdateClass]2. ON [dbo].[School]3. AFTER UPDATE4. AS5. DECLARE6. @schoolID INT,--学校ID7. @isAvailable CHAR(2)--是否可用8. BEGIN9. --查询出更新记录的SchoolID和IsAvailable字段值10. SELECT @schoolID=SchoolID, @isAvailable=IsAvailable FROM inserted11.12. --如果更新的是isAvailable并且更新后的字段值是否13. if (UPDATE(isAvailable) and @isAvailable = '否')14. --标示该学校所有班级不可用(班级表中IsAvailable字段值为否)15. UPDATE Class SET IsAvailable='否' WHERE SchoolID=@schoolID16. END在Class表中建立如下触发器:[sql]view plaincopyprint?1. CREATE TRIGGER [dbo].[UpdateStudent]2. ON [dbo].[Class]3. AFTER UPDATE4. AS5. DECLARE6. @classID INT,--班级ID7. @isAvailable CHAR(2)--是否可用8. BEGIN9. --查询出更新记录的ClassID和IsAvailable字段值10. SELECT @classID=ClassID, @isAvailable=IsAvailable FROM inserted11.12. --如果更新的是isAvailable并且更新后的字段值是否13. IF (UPDATE(isAvailable) and @isAvailable = '否')14. --更新该班级下的所有学生IsAvailable字段值为否15. UPDATE Student SET IsAvailable='否' WHERE ClassID=@classID16. ENDPerfect,到此为止,我们的工作貌似要结束了,插入如下数据,测试一下。
实验6 游标、存储过程和触发器

实验六游标、存储过程与触发器
一、实验目的
掌握使用T-SQL实现游标、存储过程和触发器的创建,使用方法。
二、实验内容
在实验一、实验二创建的表中用T-SQL语句完成以下内容:
1.使用游标实现将及格的选课信息输出。
2.使用游标将SPJ表中的偶数行输出。
3.创建存储过程,查询赵永亮所修课程的课程信息,将课程号和课程名输出。
4.创建存储过程,统计指定学生修课的平均成绩和选课门数,将统计的结果用输出参数返回。
5.创建存储过程,在学生表Student中插入一条完整的元组。
6.创建存储过程,根据用户指定的供应商号删除SPJ表中相应的供货信息。
7.创建存储过程,将指定零件的重量增加指定的值。
8.用触发器实现约束:如果是北京的供应商,供应任何零件的数量不能少于300,如果少于则自动改为300。
9.在SC关系中增加新属性列Status,用来记录课程成绩的等级,0-59分为“不合格”,60-69为“合格”,70-89为“良好”,90以上为“优秀”。
要求status属性列的值由用户在插入、更新选课成绩时系统自动填写和更新。
数据库原理实验报告S11-数据库触发器的创建.

实验主要任务:导入学生成绩数据库,并建立相关表的关系,对数据库实施如下操作:一、利用SQL Server管理控制台创建DML触发器中的INSERT触发器的后(AFTER)触发器1. 利用SQL-SERVER管理控制台:创建一个INSERT触发器“TR_Course_Insert”,当在课程表中插入一条新记录时,触发该触发器,并给出“你插入了一条新的课程记录!”的提示信息。
2.创建了TR_Course_Insert触发器后,查看向课程表中插入数据时,此触发器所完成的功能。
二、使用Transact-SQL语句创建DML的后(FOR、AFTER)触发器(一)实现检查约束3. 创建一个AFTER触发器,要求实现以下功能:在成绩表上创建一个插入、更新类型的触发器TR_ScoreCheck,当在成绩字段中插入或修改考试分数后,触发该触发器,检查分数是否在0-100之间。
create trigger TR_ScoreCheckon成绩for insert,updateasif(select成绩from inserted)between 0 and 100beginprint'你成功的对成绩表插入(更新)了一条记录'endelsebeginprint'(插入)更新的成绩数据错误'rollback transactionend在创建了TR_ScoreCheck触发器之后,在查询窗口中输入以下SQL语句验证:(独立完成:4.创建一个AFTER触发器,要求实现以下功能:在2003学生名单表上创建一个插入、更新类型的触发器TR_Sex_Check,当在性别字段中插入或修改性别后,触发该触发器,检查性别是否是‘男’或‘女’,并验证)set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgoALTER trigger [TR_Sex_Check]on [dbo].[学生名单]for insert,updateasif(select性别from inserted)in('男','女')beginprint'插入(更新)数据'endelsebeginprint'插入或更新的性别错误'rollback transactionend(二)实现层叠修改5.创建一个AFTER触发器,要求如下:在学生表上创建一个删除类型的触发器TR_Stu_Delete,当在学生表中删除某一条记录后,触发该触发器,在成绩表中删除与此学号对应的记录。
数据库实验6触发器实验报告

淮海工学院计算机工程学院实验报告书课程名:《数据库原理及应用》题目:存储过程和触发器班级:软件132学号: 2013122907姓名:孙莹莹一.目的与要求1.掌握存储过程的创建方法;2.掌握存储过程的执行、修改和删除等操作;3.掌握触发器的创建方法;4.掌握触发器的使用、修改和删除等相关内容二.实验内容基于前面建立的factory数据库,使用T-SQL语句完成如下各小题的功能:1.创建一个为worker表添加职工记录的存储过程Addworker;2.创建一个存储过程Delworker删除worker表中指定职工号的记录。
3.显示存储过程Delworker;4.删除存储过程Addworker和Delworker.三.实验步骤1 .(1)建立存储过程USE factoryGOCREATE PROCEDURE Addworker@no int=NULL,@name char(10)=NULL,@sex char(2)=NULL,@birthday datetime=NULL,@na char(2)=NULL,@wtime datetime=NULL,@depno int=NULLASIF @no IS NULL OR @name IS NULL OR @sex IS NULL OR@birthday IS NULL OR @depno IS NULLBEGINPRINT '请重新输入该职工信息!'PRINT '你必须提供职工号、姓名、性别、出生日期、部门号'RETURNENDBEGIN TRANSACTIONINSERT INTO workerVALUES(@no,@name,@sex,@birthday,@na,@wtime,@depno)IF @@error<>0BEGINROLLBACK TRANRETURNENDCOMMIT TRANSACTIONPRINT '职工'+@name+'的信息成功添加到表worker中'(2)验证存储过程USE factoryGOAddworker 20,'陈立','女','55/03/08','否','75/10/10',4GOSELECT 职工号,姓名,性别,党员否 FROM workerGO2.(1)建立存储程序USE factoryGOCREATE PROCEDURE Delworker@no int=NULLASIF @no IS NULLBEGINPRINT '必须输入职工号!'RETURNENDBEGIN TRANSACTIONDELETE FROM worker WHERE 职工号=@noIF @@error<>0BEGINROLLBACK TRANRETURNENDCOMMIT TRANSACTIONPRINT '成功删除职工号为'+CAST(@no AS CHAR(2))+'的职工记录' 执行下列语句,可验证存储过程的正确性:USE factoryGODelworker 20GOSELECT 职工号,姓名,性别,党员否 FROM workerGO3.USE factoryGOEXEC sp_helptext DelworkerGO4.USE factoryGOIF EXISTS (SELECT name FROM sysobjectsWHERE name = 'Addworker' AND type ='P') DROP PROCEDURE AddworkerGOIF EXISTS (SELECT name FROM sysobjectsWHERE name = 'Delworker' AND type ='P') DROP PROCEDURE DelworkerGO5.建立触发器depart_update的程序如下:USE factoryGOIF EXISTS (SELECT name FROM sysobjectsWHERE type='TR' AND name='depart_update')DROP TRIGGER depart_updateGOCREATE TRIGGER depart_update ON departAFTER UPDATEASDECLARE @olddepno int,@newdepno intSELECT @olddepno=部门号FROM deletedSELECT @newdepno=部门号FROM inserted UPDATE workerSET 部门号=@newdepnoWHERE 部门号=@olddepnoGO执行下列语句,可验证存储过程的正确性:USE factoryGOPRINT '将部门号改为'UPDATE departSET 部门号=105WHERE 部门号=101GOSELECT 职工号,姓名,部门号FROM workerGOPRINT '将部门号改为'UPDATE departSET 部门号=101WHERE 部门号=105GOSELECT 职工号,姓名,部门号FROM workerGO6.建立触发器worker_delete的程序如下:USE factoryGOIF EXISTS(SELECT name FROM sysobjectsWHERE type='TR'AND name='worker_delete')DROP TRIGGER worker_deleteGOCREATE TRIGGER worker_delete ON workerFOR DELETEASDECLARE @no intSELECT @no=职工号FROM deletedDELETE FROM salaryWHERE职工号=@noGO执行下列语句,可验证存储过程的正确性:USE factoryGOPRINT'删除前的工资记录'SELECT*FROM salaryGODELETE FROM workerWHERE职工号=15GOPRINT'删除职工号为的职工记录后的工资记录'SELECT*FROM salaryGO7.删除触发器depart_update的程序如下:USE factoryGODROP TRIGGER depart_updateGO8.删除触发器worker_delete的程序如下:USE factoryGODROP TRIGGER worker_deleteGO四.测试数据与实验结果第1题图第2题图第3题图第5题图第6题图五.结果分析与实验体会CREATE PROCEDURE语句允许创建、编译并在MS-SQL Server上保存存储过程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据库原理》实验报告要求
报告的主要内容
一、实验目的
根据各实验项目的实验目的撰写,具体在附件中给出。
二、实验环境
操作系统:Windows XP,数据库管理系统(DBMS):SQL Server2008
三、实验要求
根据各实验项目要求撰写,具体在附件中给出。
四、实验内容及完成情况
自己所完成的内容,进行了哪些操作、编写了哪些程序及执行后的结果,包括一些错误结果及解决办法等。
五、实验体会
具体要求
1、 本实验属综合性实验,要使用学校统一的报告纸,附加纸张要
挟在报告纸内并左侧装订;
2、 报告纸的封面要填写完整,项目要与实验日历中的项目完全一
致,否则将返回重写;
3、 报告第四项“实验内容及完成情况”中,只允许对操作结果和
程序运行结果进行打印,其余内容必须用钢笔或水性笔书写,
报告要整洁;
4、 严禁出现雷同报告,如果出现雷同,雷同报告的所有学生本次实
验将作不及格或最低分处理。
如果出现不及格实验项目将取消考
试资格。
实验目的及要求
实验三、存储过程及游标
实验目的:
综合运用程序设计和数据结构,使用游标完成具有较完整功能的存储过程。
实验要求:
根据所给的excel表格,完成实验内容。
说明:“招生表”中部分属性保存的是代码值,请按所给代码表完成如下要求。
1.使用SQL语句创建数据库,并在数据库中完成表的创建。
(报告中要分析各个表的主键和外键是什么)
创建数据库studentManage
2.写一个存储过程,功能是查询所有招生信息。
使用游标完成逐行输出,每行要有行号。
(在查询结果中,要求各类代码要替换成具体的文字信息,例如:政治面貌不要显示“01”,而要显示“中共党员”。
)
3.写一个触发器,当“录取专业代码-名称”表的“代码”发生变动时,“招生表”中对应的信息也要修改,来维护数据的一致性。