实验六 游标、存储过程和触发器

合集下载

存储过程及触发器实验报告

存储过程及触发器实验报告

存储过程及触发器实验报告实验目的:1、了解存储过程及其应用;2、了解触发器及其应用;3、掌握使用存储过程及触发器完成数据操作的方法。

实验过程:1、存储过程存储过程是指一组为了完成特定功能的SQL语句集合。

存储过程可以接收传入参数并返回处理结果。

存储过程的好处是可以减少网络流量,提高性能,增加安全性。

在本次实验中,我们将学习如何创建存储过程。

首先,在MySQL中打开MySQL Workbench,进入我们的实验数据库。

然后我们就可以创建一个存储过程了。

创建存储过程的语法如下:CREATE PROCEDURE procedure_name ()BEGIN-- SQL statementsEND;在这个语法中,procedure_name是我们想要创建的存储过程的名称。

在BEGIN和END 之间,我们可以输入一组SQL语句,这些语句将组成存储过程的主体内容。

我们可以以一个创建一个简单的存储过程作为例子,这个存储过程的作用是输出一条信息。

我们将这个存储过程命名为print_message。

在上面的语句中,我们定义了一个存储过程,它被命名为print_message。

它只包含一条SELECT语句,这条语句将输出Hello, World!这个字符串。

创建完存储过程之后,我们可以通过CALL语句来调用它:CALL print_message();执行这个语句后,我们将会看到Hello, World!这个字符串输出到屏幕上。

2、触发器触发器是一种被动的对象,它是由数据库管理系统在数据表上自动执行的一些操作。

当数据表中发生某些指定的操作时,触发器就会被调用执行。

触发器通常用于数据表中的数据变更操作,比如插入、更新和删除。

在本次实验中,我们将学习如何创建和使用触发器。

在MySQL中创建触发器的语法如下:CREATE TRIGGER trigger_name{BEFORE | AFTER} trigger_event ON table_nameFOR EACH ROW trigger_body;在这个语法中,trigger_name是我们想要创建的触发器的名称。

6、视图、存储过程、函数、游标与触发器

6、视图、存储过程、函数、游标与触发器

--创建带输入参数的存储过程 if exists(select name from sysobjects where name='pro_name' and type='p') drop procedure pro_name Go create procedure pro_name @vempno int as declare @v_name varchar(10),@v_sal decimal(10,2) begin begin try select @v_name=ename,@v_sal=sal from emp where empno=@vempno if @v_sal<2500 print '工资超过2500' else print '工资少于2500' end try begin catch print '错误号:'+cast(@@error as varchar(10)) print '错误内容:'+error_message() end catch end ----使用存储过程 pro_name 7369
2.2,存储过程的分类
用户自定义的存储过程:最主要的存储过 程 系统存储过程:sp_前缀,系统预定义 扩展存储过程:保存在DLL动态链接库中并 从动态链接库中执行的C++程序代码,用于 扩展SQLSERVER2005性能,以字符xp_开 头,通常与其它系统存储过程一起使用通 过程序集调用.
2.3,存储过程的设计规则
1.2.2,索引视图
--创建各部门人数的视图 drop view v_countOfDept go create view v_countOfDept WITH SCHEMABINDING as SELECT EMP.deptno,count_big(*) empcount FROM dbo.EMP group by emp.deptno --创建聚合索引 CREATE UNIQUE CLUSTERED INDEX i_v_countOfDept_deptno ON v_countOfDept(deptno) 注意: (1)创建索引视图,必须拥有唯一聚合索引,如果创建聚合索引,带有聚合函数的基础视 图必须使用WITH SCHEMABINDING ,group by以及count_big函数 (2)使用索引视图能提高数据库效率 (3)如果视图引用任何非确定性函数,则不能在视图上创建聚集索引

触发器与存储过程的建立与使用

触发器与存储过程的建立与使用
fromemployee
whereemp_name='刘刚')
命令已成功完成。
10.
createproceduresearchman
as
begin
declaresearchcursorfor
selectemp_no
fromemployee
whereemp_namelike'李%'andtitle='职员'
go
命令已成功完成。
execproaddemployee'E0022','罗刚','M','业务','经理','12/7/2009','01/01/1987',15000,'都匀市'
select*
fromemployee
8.
createprocedureproesc
as
begin
declare@emp_nochar(5),@emp_namechar(10),@ccust_idchar(5),@cust_namechar(20),@scust_idchar(5),@sale_idchar(5),@tot_amtnumeric(9,2)
begin
fetchnextfromcur_cus_new
select"fecth_status值"=@@FETCH_STATUS
end
select"cursor读取状态"=cursor_status('variable','@cur_cus_new')
3.
createtriggerdelelteemployee

实验5:存储过程和触发器

实验5:存储过程和触发器

云南大学软件学院实验报告课程:数据库原理与实用技术实验学期:2014-2015学年第二学期任课教师:薛岗、朱艳萍专业:学号:姓名:成绩:实验5 存储过程和触发器一、实验目的(1)理解存储过程的概念、了解存储过程的类型(2)掌握创建存储过程的方法(3)掌握执行存储过程的方法(4)理解触发器的功能及工作原理。

(5)掌握创建、更改、删除触发器的方法。

二、实验内容1、使用不带参数的存储过程(1)创建一个存储过程,查询person表中所有不重复的职称。

(2)执行存储过程。

2、带输入参数的存储过程(1)创建一个存储过程,按照姓名查询person表中的员工信息。

(2)执行存储过程,查询名为黎明的员工数据3、带输入/输出参数的存储过程(1)创建一个存储过程,使其能够根据员工姓名,查询员工工资。

(考虑到员工不存在时给出提示信息)(2)执行存储过程4、使用触发器(1)创建一个触发器trig_update,返回对person进行更新操作后,被更新的记录条数(2)执行触发器(3)修改触发器trig_update,除返回被更新的记录条数外,再返回学生的所有基本信息5、使用触发器的两个特殊表:插入表(inserted)和删除表(deleted)。

(1)在person上创建触发器ins_del_sample,在插入、删除或更新操作后,分别从inserted表和deleted表中查询员工所有信息。

(请同学们在做删除操作时,注意备份)(2)执行触发器。

思考执行插入、删除和更新操作后返回的表有什么区别?6、使用系统存储过程查看触发器(与存储过程的使用类似)(1)显示触发器trig_update的一般信息(2)显示触发器trig_update的源代码(3)显示person上所有的依赖关系(4)显示触发器trig_update所引用的对象。

数据库中的游标存储过程和触发器

数据库中的游标存储过程和触发器

数据库中的游标存储过程和触发器游标、存储过程和触发器是数据库中常用的三种特殊对象。

游标用于在数据库管理系统中对查询结果进行逐行处理,存储过程是一组预定义的SQL语句集合,可以被重复调用执行,而触发器则是在数据库中的特定事件发生时自动执行的一段代码。

首先,我们来了解一下游标。

游标是一个数据库概念,它可以被看作是一个指向查询结果集的指针。

通过游标,我们可以在数据库内部对查询结果集进行逐行处理,从而实现对数据的操作。

游标的使用可以有效地减少数据库服务器的负担,提高数据库性能。

在一些需要对批量数据进行处理的场景下,游标可以发挥重要作用。

例如,当需要对查询结果逐行进行计算、更新或者删除时,可以使用游标定位到每一条记录,并对其进行操作。

接下来,我们了解一下存储过程。

存储过程是一组预定义的SQL语句的集合,它们一起执行一些特定的任务。

存储过程可以包含流程控制、循环结构、条件判断等逻辑,还可以接受参数并返回结果。

存储过程的好处在于可以实现代码复用,提高数据库的性能和可维护性。

通过存储过程,我们可以将常用的SQL操作封装起来,减少了网络传输的开销,提高了数据访问的效率。

另外,存储过程还可以实现权限控制,通过调用存储过程来间接访问数据库,可以避免直接在应用程序中操作数据库,增强了数据的安全性。

最后,我们来了解一下触发器。

触发器是在数据库中特定的事件发生时自动执行的一段代码。

这些事件可以是INSERT、UPDATE或者DELETE操作。

触发器通常被用来在数据库表的数据发生变化时执行相应的操作。

它可以用来保证数据库的数据一致性和完整性,触发器能够在数据被修改之前或之后自动执行,并且可以在代码中加入逻辑判断和业务处理。

例如,在一个订单表中,我们可以定义一个触发器,在插入一条新订单数据时,自动计算订单总金额并更新到订单的总金额字段中。

总结一下,游标、存储过程和触发器是对数据库进行处理和控制的重要工具。

游标可以让我们逐行处理查询结果集,存储过程可以定义逻辑处理、实现代码的复用,而触发器则可以在数据库表的特定事件发生时自动执行一段代码。

存储过程和触发器

存储过程和触发器

实验存储过程和触发器实验一存储过程的创建和使用【实验目的】1.掌握存储过程的概念,了解存储过程的类型2.掌握创建各种存储过程的方法3.掌握执行存储过程的方法。

4.掌握查看,修改,删除存储过程的方法【实验内容】1.在SSMS图形化界面下创建对表Customers进行插入,修改和删除的3个存储过程:insertCustomers、updateCustomers、deleteCustomers.2.在查询分析其中创建一个存储过程,要求输入作者的姓和名,如果存在,则返回这个作者以及作者所出版的书的信息,否则给出相应的提示信息。

3.用系统存储过程查看刚创建的存储过程的信息。

4.删除存储过程【实验主要步骤】1.在SSMS图形化界面下创建对表Customers进行插入,修改和删除的3个存储过程:insertCustomers、updateCustomers、deleteCustomers.2.在查询分析其中创建一个存储过程,要求输入作者的姓和名,如果存在,则返回这个作者以及作者所出版的书的信息,否则给出相应的提示信息。

3.用系统存储过程查看刚创建的存储过程的信息。

4.删除存储过程实验二触发器的创建和使用【实验目的】1.理解触发器的概念与类型。

2.理解触发器的功能及工作原理。

3.掌握创建、修改和删除触发器的方法。

4.掌握利用触发器维护数据完整性的方法。

【实验内容】触发器是一种实施复杂数据完整性的特殊存储过程,在对表或视图执行UPDATE、INSERT、DELETE语句时自动触发执行,以防止对数据不正确、未授权或不一致的修改。

1.使用T-SQL语句创建一个DELETE触发器,完成的功能是当在Categories表中删除记录时,检测Products表中是否存在相关记录,如果存在,则给出提示信息“不能删除该条记录”;如果不存在,则删除该条记录。

2.基于Sales表创建一个触发器,针对INSERT、DELETE、UPDATE操作。

事务、存储过程、触发器和游标

04
串行化 (Serializable): 最高的隔离级别,通过强制事务串行执行,避 免了读写和写写的冲突。
02
存储过程
存储过程的定义和优点
定义
减少网络流量
提高性能
安全性
复用性
存储过程是一组为了完 成特定功能的SQL语句 集合,经过编译和存储 在数据库中,用户通过 调用存储过程来执行这 些SQL语句。
VS
详细描述
当需要对查询结果集中的每一行数据进行 操作时,如修改、删除或插入等,可以使 用游标。但是,由于游标会占用大量数据 库资源,性能较低,因此在使用时应谨慎 考虑,尽量避免在大型数据集上使用游标 。同时,还需要注意避免死锁和并发问题 。
感谢您的观看
THANKS
要点二
详细描述
首先,需要声明一个游标变量并设置其属性,如光标类型 、缓冲区大小等。然后,使用OPEN语句打开游标并执行 查询。接下来,使用FETCH语句从结果集中获取数据,并 使用循环结构逐行处理数据。最后,使用CLOSE语句关闭 游标。
游标的使用场景和注意事项
总结词
游标适用于需要逐行处理查询结果集的 场景,但需要注意性能和资源消耗问ommitted): 最低的隔离级别,一个事务可以看 到其他未提交事务的修改。
02
读已提交 (Read Committed): 一个事务只能看到已经提交的事务所 做的修改。
03
可重复读 (Repeatable Read): 在同一事务中多次读取同一数据返回 的结果是一致的。
一致性 (Consistency)
事务必须使数据库从一个一致性状态转变到另一个一致性状态。一致 性是指数据库满足完整性约束。
隔离性 (Isolation)
在事务完成之前,它所做的修改对其他事务是透明的。这意味着并发 执行的事务不会互相干扰。

第7章事务存储过程触发器和游标精品PPT课件


TRUNCATE TABLE GRANT
REVOKE
INSERT
UPDATE
DELETE
SELECT
OPEN
FETCH
需要关闭隐式事务模式时,调用SET语句关闭
IMPLICIT_TRANSACTIONS 连接选项即可。
第7章事务、存储过程、触发器和游标
3) 自动事务模式
在自动事务模式下,当一个语句被成功执行后,它被 自动提交,而当它执行过程中产生错误时,被自动回滚。 自动事务模式是SQL Server的默认事务管理模式,当与 SQL Server建立连接后,直接进入自动事务模式,直到使 用BEGIN TRANSACTION语句开始一个显式事务,或者打开 IMPLICIT_TRANSACTIONS 连接选项进入隐式事务模式为止。
第7章事务、存储过程、触发器和游标
关于嵌套事务:
说明:在定义一个事务时,BEGIN TRANSACTION语 句应与COMMIT TRANSACTION语句或ROLLBACK TRANSACTION成对出现。在SQL Server中,显示事务定义 语句可以嵌套.一个嵌套的事务是一系列子事务ti的集合, T={t1,t2,…,tn},这些子事务中的每一个又可以是拥有它自己的 事务.T能够决定子事务ti的启动和终止,反过来,如果T中的一个 子事务ti终止,它强制T终止;如拖ti提交,这一动作并不能使ti成 为永久的,如果T终止(回滚),那么ti的提交将被撤消.
SET TRANSACTION ISOLATION LEVEL{ READ UNCOMMITTED |READ COMMITTED |REPEATED READ |SERIALIZATION
}
第7章事务、存储过程、触发器和游标

数据库技术及应用 存储过程与触发器(6.3)--实验六

“数据库技术及应用”教学单元6:存储过程与触发器实验本部分实验只适合SQL Server系统环境实验1: 使用企业管理器创建用户存储过程。

实验目的:掌握创建用户存储过程的方法;实现使用企业管理器创建用户存储过程,创建“男学员”存储过程,用于控制输入数据检验。

实验步骤:① 启动SQL Server企业管理器。

② 在“控制台目录”窗口左侧窗格中,首先,展开“SQL Server组”→“数据库”结点,然后,展开“Training”数据库→“存储过程”结点,单击鼠标右键,弹出快捷菜单,如下图所示。

③ 在快捷菜单中,选择“新建存储过程”菜单命令,打开“存储过程属性-新建存储过程”对话框,如下图所示。

④ 在“存储过程属性-新建存储过程”对话框的“文本”文本框中,输入下列存储过程代码:CREATE PROC 男学员AS SELECT stu_name,stu_sex,stu_phoneFROM tra_studentsWHERE stu_sex = '男'⑤ 在“存储过程属性-新建存储过程”对话框中,单击“检查语法”。

若没有错误,单击“确定”按钮,完成存储过程创建,如下图所示。

实验2:使用企业管理器创建触发器。

实验目的:掌握创建触发器的方法;实现使用企业管理器创建触发器,创建“学员_性别”触发器,用于控制输入数据检验。

实验步骤:① 启动SQL Server企业管理器。

② 在“控制台目录”窗口左侧窗格中,首先,展开“SQL Server组”→“数据库”结点,然后,展开“Training”数据库结点。

双击“表”子结点,在“控制台目录”的右侧窗格中选择要建立触发器的“Tra_students”表,单击鼠标右键,弹出快捷菜单,如下图所示。

③ 在快捷菜单中,选择“所有任务”→“管理触发器”菜单命令,打开“触发器属性”对话框。

在“触发器属性”对话框的“文本”文本框中输入下列触发器过程代码:CREATE TRIGGER 学员_性别 ON Tra_studentsFOR INSERT, UPDATEASIF EXISTS (SELECT * FROM tra_students WHERE stu_sex NOT IN ('男','女'))BEGINRAISERROR ('请输入合法性别!',16,1)ROLLBACK TRANSACTIONEND单击“确定”按钮,完成“学员_性别”触发器的创建。

数据库编程技术——游标、存储过程与触发器

实验八数据库编程技术—游标、存储过程与触发器一、实验目的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列的值,并且一次只能更新一行。

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

实验六 游标、存储过程与触发器
一、实验目的
掌握使用T-SQL实现游标、存储过程和触发器的创建,使用方法。
二、实验内容
在实验一、实验二创建的表中用T-SQL语句完成以下内容:
1.使用游标实现将及格的选课信息输出。
use Student;
DECLARE ST CURSOR FOR
SELECT *
FROM C
WHERE Cno IN(
SELECT Cno
FROM SC
WHERE Grade between 60 and 100
)
DECLARE @Cno nchar(10)
DECLARE @Cname nchar(20)
DECLARE @Credit float
DECLARE @Property nchar(14)
DECLARE @Tname varchar(10)
open ST
fetch ST INTO @Cno,@Cname,@Credit,@Property,@Tname;
WHILE @@FETCH_STATUS = 0
begin
PRINT @Cno+' '+@Cname+' '+cast(@Credit as char(10)) +' '+@Property
fetch next from ST INTO @Cno,@Cname,@Credit,@Property,@Tname;
end

close ST
deallocate ST
2.使用游标将SPJ表中的偶数行输出。
use gongcheng1;
DECLARE So CURSOR FOR
select Sno,Pno,Jno,QTY from
(select *,row_number() over(order by getdate()) 'rn' from SPJ) t
where t.rn%2=0

DECLARE @Sno char(10)
DECLARE @Pno char(10)
DECLARE @Jno char(10)
DECLARE @QTY INT

OPEN So
fetch next from So INTO @Sno,@Pno,@Jno,@QTY
WHILE @@FETCH_STATUS = 0
begin
PRINT @Sno+' '+@Pno+' '+@Jno++' '+cast(@QTY as char(10))
fetch next from So INTO @Sno,@Pno,@Jno,@QTY
end

close So
deallocate So

3.创建存储过程,查询赵永亮所修课程的课程信息,将课程号和课程名输出。
CREATE PROCEDURE Cno_Cname @NAME VARCHAR(20)
AS
SELECT C.Cno,C.Cname
FROM SC,C,S
WHERE(S.Sname=@NAME AND SC.Cno=C.Cno AND SC.Sno=S.Sno)

EXEC Cno_Cname'赵永亮'
DROP PROCEDURE Cno_Cname
4.创建存储过程,统计指定学生修课的平均成绩和选课门数,将统计的结果用
输出参数返回。
CREATE PROCEDURE AvgCount
@sn varchar(20),
@avg_grade int output,
@total int output
AS
SELECT @avg_grade = AVG(Grade),
@total = COUNT(S.Sno)
FROM SC,S
where S.Sno = @sn and SC.Sno = S.Sno

DECLARE @Avggrade int, @total int
Exec AvgCount '09105107',@avggrade output ,@total output

Select @avggrade,@total

5.创建存储过程,在学生表Student中插入一条完整的元组。
CREATE PROCEDURE Insert_S
@Sno1 nchar(8),@Sname1 nchar(10),@Ssex1 nchar(2),@Age
smallint,@Deptment1 nchar(20)
AS
INSERT INTO S(Sno,Sname,Ssex,Sage,Deptment)
VALUES(@Sno1,@Sname1,@Ssex1,@Age,@Deptment1)

EXEC Insert_S '09105110','唐烨','男',19,'信息'

6.创建存储过程,根据用户指定的供应商号删除SPJ表中相应的供货信息。
CREATE PROCEDURE Del_SPJ
@Sel_Sno nchar(10)
AS
DELETE FROM SPJ
WHERE @Sel_Sno=Sno

EXEC Del_SPJ 'S1'

7.创建存储过程,将指定零件的重量增加指定的值。
CREATE PROCEDURE Add_weight
@Pno1 char(10),@add_weight INT
AS
UPDATE P
SET Weight=Weight+@add_weight
WHERE P.Pno=@Pno1
EXEC Add_weight 'P1',40

drop PROCEDURE Add_weight
8.用触发器实现约束:如果是北京的供应商,供应任何零件的数量不能少
于300,如果少于则自动改为300。
CREATE TRIGGER TY ON SPJ
AFTER UPDATE,INSERT
AS
DECLARE @sNO char(10),@Qty INT
SELECT @sNO=Sno,@Qty=QTY
FROM INSERTED IF
@Qty<300 AND @sNO IN(
SELECT Sno
FROM S
WHERE City='北京')
UPDATE SPJ
SET QTY=300

INSERT INTO SPJ(Sno,Pno,Jno,QTY)
VALUES ('S2','P2','J1',100)

DROP TRIGGER TY
9.在SC关系中增加新属性列Status,用来记录课程成绩的等级,0-59分
为“不合格”,60-69为“合格”,70-89为“良好”,90以上为“优秀”。要求
status属性列的值由用户在插入、更新选课成绩时系统自动填写和更新。
ALTER TABLE SC ADD status char(10)
CREATE TRIGGER TY_add ON SC
FOR UPDATE,INSERT
AS
DECLARE @SNO nchar(8),@CNO nchar(10),@GRADE INT,@STATUS char(10)
SELECT @SNO=Sno,@CNO=Cno,@GRADE=Grade
FROM INSERTED
SELECT @STATUS=
CASE
WHEN @GRADE<60 THEN '不合格'
WHEN @GRADE>=60 and @GRADE<70 THEN '合格'
WHEN @GRADE>=70 and @GRADE<90 THEN '良好'
ELSE '优秀'
end
UPDATE SC
SET status=@STATUS
WHERE Sno=@SNO AND Cno=@CNO AND Grade=@GRADE

INSERT INTO SC(Sno,Cno,Grade)
VALUES ('09105101','001',66)

DROP TRIGGER TY_add

三、实验总结
这是数据结构最后一次实习。
在本次实习中遇到了很多问题,在游标,存储过程以及触发器的使用过程中
多多少少都存在一些问题。比如,使用游标将SPJ表中的偶数行输出,这个问题
中就不知道怎么输出偶数行。但是最终在同学和老师的帮助下成功的完成了本次
实验。

相关文档
最新文档