实验六存储过程设计
实训六存储过程
实训六:存储过程1.实训目的1)通过对常用系统存储过程的使用,了解存储过程的类型;2)通过创建和执行存储过程,了解存储过程的基本概念,掌握使用存储过程的操作技巧和方法;3)通过对已创建的存储过程的改变,掌握修改存储过程的操作技巧和方法;2.实训工具SQL Server2005SQL Server Management Studio。
3 实训内容(保存操作过程程序设计语句和结果)1、使用sp_helptext查看byroyalty存储过程的文本,该存储过程在数据库pubs中。
2、在学生库中创建存储过程proc_8_t1,要求实现如下功能:产生学分为’4’的课程学生选课情况列表,其中包括课程号、课程名、学分、学号、姓名、系别、性别等。
并调用此存储过程,显示执行结果。
3、在学生库中创建存储过程proc_8_t2,要求实现如下功能:输入系号,产生该系学生的选课情况列表,其中包括系号、学号、姓名、课程号、课程名、成绩、学分等。
并调用此存储过程,显示信息系号为‘20’的所有学生的选课情况列表。
4、在学生库中创建存储过程proc_8_t3,要求实现如下功能:输入学生学号,根据该学生所选课程的总学分显示提示信息,如果总学分<9,则显示“此学生学分不足!”,否则显示“此学生学分已足!”。
并调用此存储过程,显示“1002”学生的总学分情况。
对学生库中已创建的存储过程proc_8_t1进行修改,要求在显示列表中增加教师字段,即产生学分为’4’的课程学生选课情况列表,其中包括课程号、课程名、授课教师号(TNO)、学分、学号、姓名、系别、专业、性别等。
5、对学生库中已创建的存储过程proc_8_t2进行修改,要求实现如下功能:输入课程名称,产生选修该课程所有男生的选课情况列表,其中包括学号、姓名、性别、课程号、课程名、成绩、学分等。
并调用修改后的存储过程,显示选修“离散数学”男生的选课情况列表。
6、对学生成绩库中已创建的存储过程proc_8_t3进行修改,要求实现如下功能:输入学生学号,根据该学生所选课程的总学分显示提示信息,如果总学分<9,则显示“此学生所选总学分为XXX,学分不足!”,否则显示“此学生所选总学分为XXX,学分已足!”。
实验六 MySql存储过程
实验六MySql存储过程一、实验目的1、熟悉MySql的存储过程二、实验内容1、建立一张学生表,属性有学号、姓名、年龄三个字段。
2、建立一个存储过程,实现学生的全查询3、分别用IN 和OUT实现姓名的调用4、声明一个变量,把变量加1,再把变量加入到学生表的学号字段中。
5、建立一个存储过程,外部调用这个存储过程,当外部传入的值是0时,则在学生表中插入一个学号是17的学生,如果是1时,则在学生表中插入一个学号是18的学生,如果都不是,则在学生表中插入一个学号是19的学生.6、建立一个存储过程,做一个循环语句,循环插入5个学生。
(至少用三种循环的存储过程方法)三、试验结果截图1.建立一张学生表,属性有学号、姓名、年龄三个字段。
2.建立一个存储过程,实现学生的全查询3.分别用IN 和OUT实现姓名的调用4.声明一个变量,把变量加1,再把变量加入到学生表的学号字段中。
5.建立一个存储过程,外部调用这个存储过程,当外部传入的值是0时,则在学生表中插入一个学号是17的学生,如果是1时,则在学生表中插入一个学号是18的学生,如果都不是,则在学生表中插入一个学号是19的学生.6建立一个存储过程,做一个循环语句,循环插入5个学生。
(至少用三种循环的存储过程方法)所有代码:1.create table stu(stuno int,stuna varchar(20),stuage int);insert into stu values(001,'zhangsan',22);insert into stu values(002,'lisi',23);insert into stu values(003,'wangwu',23);insert into stu values(004,'maliu',24);insert into stu values(005,'zhaoqi',25);insert into stu values(006,'gaoba',23);insert into stu values(007,'ddddd',22);insert into stu values(008,'ttttt',21);2.create procedure select_all()select * from stu;3.delimiter //create procedure searchno(in no int,out na varchar(20),out age int)beginselect stuna from stu where stuno=no into na;select stuage from stu where stuno=no into age; end //delimiter ;call searchno(n,@na,@age);select @na,@age;4.delimiter //create procedure noupdate(in n int)beginupdate stu set stuno=stuno+n;end //delimiter ;5.delimiter //create procedure addstu(in sno int)begincase snowhen 0 then insert into stu values(17,'no17',20); when 1 then insert into stu values(18,'no18',20); else insert into stu values(19,'no19',20);end case;end //delimiter ;6.(1).delimiter //create procedure add5stu1()begindeclare num1 int;set num1=0;loop_label:loopinsert into stu values (111,'111',20);set num1=num1+1;if num1>=5 then leave loop_label;end if;end loop;end //delimiter ;(2).delimiter //create procedure add5stu2()begindeclare num2 int;set num2=0;while num2<5 doinsert into stu values (222,'222',20);set num2=num2+1;end while;end //delimiter ;(3).delimiter //create procedure add5stu3()begindeclare num3 int;set num3=0;repeatinsert into stu values (333,'333',20);set num3=num3+1;until num3>=5end repeat;end //delimiter ;四、实验小结本次试验让我好好补习了下前段时间落下的课程,让我对数据库有了新的体会和认识,试验中碰到了一些问题,但都已解决和理解。
网络数据库实验六存储过程
实验:存储过程实验学时:2个学时实验类型:(验证、综合、设计)一、内容概述:1、存储过程简介存储过程是存储于数据库中的一组T-SQL语句。
有了存储过程之后,与数据库的交互就没有必要在程序中写一堆的SQL语句,而只需用一条语句调用适当的存储过程来完成就可以了。
另外,由于代码是存储在数据库中,我们也可以在不同的应用程序或查询窗口中不断的重复利用那些代码。
存储过程功能的优点①预编译执行程序。
SQL Server只需要对每一个存储过程进行一次编译,然后就可以重复使用执行计划。
这个特点通过重复调用存储程序极大地提高了程序的性能。
②缩短客户端/服务器之间的信息传输量。
如果你的工作环境带宽有限,那么存储过程技术肯定能够满足你,因为它能够把需要传输的长的SQL查询缩短成一行。
③有效重复使用代码和编程。
存储过程可以为多个用户所使用,也可以用于多个客户程序。
这样可以减少程序开发周期的时间。
④增强安全性控制。
可以允许用户单独执行存储过程,而不给于其访问表格的权限。
2、创建存储过程语法CREATE PROC[ EDURE ] [ owner. ] procedure_name [ ; number ][ { @parameter data_type }[ VARYING ] [ = default ] [ OUTPUT ]] [ ,...n ][ WITH{ RECOMPILE | ENC RYPTION | RECOMPILE , ENC RYPTION } ][ FOR REPLICATION ]AS sql_statement [ ...n ]示例:AjaxCity表ID CityName Short1 苏州市SZ2 无锡市WX3 常州市CZ⑴.选择表中所有内容并返回一个数据集CREATE PROCEDURE mysp_AllASselect * from AjaxCityGO执行结果⑵.根据传入的参数进行查询并返回一个数据集CREATE PROCEDURE mysp_para@CityName varchar(255),@Short varchar(255)ASselect * from AjaxCity where CityName=@CityName And Short=@ShortGO执行结果⑶.带有输出参数的存储过程(返回前两条记录的ID的和)CREATE PROCEDURE mysp_output@SUM int outputASselect @SUM=sum([ID]) from (select top 2 * from AjaxCity) as tmpTable GO执行结果二、实验报告实验报告课程名称网络数据库SQL Server2005实验名称存储过程实验时间________年____月____日成绩一、实验目的1、熟悉存储过程基本概念和类型。
实验六管理存储过程11页word
实验六存储过程与触发器一、存储过程【创建存储过程】:CREATE PROCEDURE [OWNER].[PROCEDURE NAME]AS <SQL块>如:Use pubsGoCreate procedure author_informationAsselect au_lname,au_fname,title,pub_namefrom authors ajoin titleauthor taon a.au_id=ta.au_idjoin titles ton t.title_id=ta.title_idjoin publishers pon t.pub_id=p.pub_idGo【管理存储过程】:➢可以使用sp_helptext命令查看创建存储过程的文本信息。
Use pubsGoSp_helptext author_informationGo➢可以用sp_help查看存储过程的一般信息。
Use pubsGoSp_help author_informationGo➢可以使用系统存储过程sp_rename修改存储过程的名字。
Use pubsGoSp_rename author_information ,authors_informationGo➢也可以使用企业管理浏览存储过程的信息,具体方法是:✧从树型结构上选中存储过程所在的数据库节点,展开该节点;✧选中数据库节点下的〖存储过程〗节点,则右边的列表列出了数据库中目前所有的存储过程;✧选中存储过程,右击,执行〖属性〗命令,则系统将弹出如图所示对话框。
✧可以在对话框中修改存储过程内容,并保存修改。
✧如果想知道某个表被存储过程引用的情况,可以使用sp_depends,Sp_depends authors✧如果想知道某个存储过程引用表的情况,则可以使用Sp_depends procedure_name【执行存储过程】:对于存储过程的调用,应使用EXECUTE或EXEC关键字。
实验六-存储过程与触发器
实验六存储过程和触发器1.实验目的(1) 掌握存储过程和触发器的基本概念和功能(2) 掌握创建,管理存储过程的方法(3) 掌握创建,管理触发器的方法2.实验内容及步骤(1) 利用SQL Server Management Studio创建一个存储过程ProcNum,查询每个班级中学生的人数,按班级号升序排序.在查询编辑器的存储过程模板中输入如下创建存储过程的代码并执行.USE teachingGOCREATE PROCEDURE ProcNum ASSELECT classno,COUNT(*)AS number FROM studentGROUP BY classno ORDER BY classno ASCGOEXEC ProcNum(2) 利用Transact-SQL语句创建一个带有参数的存储过程ProcInsert,向score 表插入一条选课记录,并查询该学生的姓名,选课的所有课程名称,平时成绩和期末成绩.<1> 在查询编辑器输入如下创建存储过程的代码并执行.USE teachingGOCREATE PROCEDURE ProcInsert(@sno NCHAR(10),@cno NCHAR(6),@usually NUMERIC(6,2),@final NUMERIC(6,2))ASINSERT INTO score VALUES (@sno,@cno,@usually,@final)SELECT sname,cname,usually,finalFROM student s,course c,score scWHERE s.studentno=sc.studentno and c.courseno=sc.courseno and s.studentno=@sno<2> 调用存储过程ProcInsert,向score表插入一条选课记录.DECLARE@AVERAGE NUMERIC(6,2)EXEC ProcInsert'16135222201','c05103',88,90(3) 利用Transact-SQL语句创建一个存储过程ProcAvg,查询指定班级指定课程的平均分。
实验教案—实验六(存储过程和触发器)(2005)
[3]《SQL SEVER数据库原理及应用》,张莉,清华大学出版社,2005
下次实验内容
存储过程的建立、修改和执行,触发器的建立和修改,设计一组操作触发触发器的执行
在A中,提交事务
在A,B窗口分别察看customerid = 'ANTON’的记录,结果如何,为什么?
3、锁的模拟
启动两个查询分析器,分别叫(A,B)
在A中,显式启动事务,察看customerid = 'ANTON'的记录
在B中,显式启动事务,察看customerid = 'ANTON'的记录
在B中,将customerid = 'ANTON’地址更新为’AAAAAA’
1).通过试验,加深学生对事务的基本概念理解语掌握;
2).通过试验,加深学生对并发控制的基本概念理解,认识不正确的并发控制所带来的危害;
3).通过试验,加深学生对锁的基本概念的掌握与理解,认识锁带来的问题;
二、实验环境
硬件:奔腾4处理器,1.8GHz,512M内存
操作系统软件:WindowsXP
数据库系统:SQLServer 2000桌面版
(3)对视图的操作
2、难点:
设计一系列操作触发触发器的执行。
四、仪器设备及用具
硬件:每位同学分配PC机一台
软件:windows环境安装好SQL Server
五、教学过程
(一)实验预习
(1)熟悉SQL中的创建存储过程和触发器的SQL语句
(2)准备好实验所用的数据库及原始数据
(二)实验原理
在查询分析器下利用SQL命令完成对所要求的存储过程的创建和执行,完成触发器的执行和设计相应操作触发触发器的执行。
存储过程教学设计方案
一、教学目标1. 知识目标:(1)了解存储过程的概念、作用和优势。
(2)掌握存储过程的创建、执行和修改方法。
(3)熟悉存储过程的参数传递和返回值。
(4)了解存储过程的异常处理和安全性。
2. 能力目标:(1)能够根据实际需求设计并创建存储过程。
(2)能够正确调用存储过程,并处理执行过程中的异常。
(3)能够对存储过程进行优化,提高数据库性能。
(4)能够编写简单的存储过程,实现复杂的数据操作。
3. 情感目标:(1)培养学生对数据库技术的兴趣和热情。
(2)提高学生的团队协作能力和沟通能力。
(3)培养学生的创新意识和解决问题的能力。
二、教学内容1. 存储过程的概念及作用2. 存储过程的创建3. 存储过程的执行4. 存储过程的修改5. 存储过程的参数传递6. 存储过程的返回值7. 存储过程的异常处理8. 存储过程的安全性9. 实战案例:创建、执行和优化存储过程三、教学方法1. 讲授法:系统讲解存储过程的基本概念、创建、执行、修改等知识。
2. 案例分析法:通过分析典型案例,让学生理解存储过程在实际应用中的价值。
3. 练习法:引导学生进行实际操作,巩固所学知识。
4. 讨论法:鼓励学生提出问题,进行小组讨论,共同解决问题。
5. 实战演练:组织学生进行实际项目开发,锻炼学生的实际操作能力。
四、教学过程1. 导入:介绍存储过程的概念、作用和优势,激发学生的学习兴趣。
2. 讲解存储过程的基本概念、创建、执行、修改等知识。
3. 通过案例分析,让学生了解存储过程在实际应用中的价值。
4. 引导学生进行实际操作,创建、执行和修改存储过程。
5. 讲解存储过程的参数传递、返回值、异常处理和安全性等知识。
6. 组织学生进行小组讨论,共同解决在操作过程中遇到的问题。
7. 实战演练:组织学生进行实际项目开发,锻炼学生的实际操作能力。
8. 总结:回顾本节课所学内容,强调重点和难点。
五、教学评价1. 课堂表现:观察学生的出勤情况、课堂参与度和提问情况。
实验存储过程实验报告
一、实验目的1. 了解存储过程的基本概念和作用。
2. 掌握存储过程的创建、执行和修改方法。
3. 学会使用存储过程进行数据库操作,提高数据库操作效率。
二、实验环境1. 操作系统:Windows 102. 数据库管理系统:MySQL 5.73. 开发工具:MySQL Workbench三、实验内容1. 创建存储过程2. 执行存储过程3. 修改存储过程4. 删除存储过程四、实验步骤1. 创建存储过程(1)打开MySQL Workbench,连接到本地数据库。
(2)在查询窗口中输入以下SQL语句创建一个存储过程:DELIMITER //CREATE PROCEDURE SelectAllStudents()BEGINSELECT FROM students;END //DELIMITER ;(3)执行以上SQL语句,成功创建存储过程。
2. 执行存储过程(1)在查询窗口中输入以下SQL语句执行存储过程:CALL SelectAllStudents();(2)观察查询结果,确认存储过程执行成功。
3. 修改存储过程(1)打开查询窗口,输入以下SQL语句修改存储过程:DELIMITER //CREATE PROCEDURE SelectAllStudents()BEGINSELECT id, name, age FROM students;END //DELIMITER ;(2)执行以上SQL语句,成功修改存储过程。
4. 删除存储过程(1)在查询窗口中输入以下SQL语句删除存储过程:DROP PROCEDURE IF EXISTS SelectAllStudents;(2)执行以上SQL语句,成功删除存储过程。
五、实验总结1. 通过本次实验,我们了解了存储过程的基本概念和作用,学会了创建、执行、修改和删除存储过程的方法。
2. 存储过程可以提高数据库操作效率,降低代码重复性,提高代码可维护性。
3. 在实际开发过程中,合理使用存储过程可以简化数据库操作,提高应用程序的性能。
实验6存储过程的应用-实验报告
图三、返回指定课程的平均成绩成功
4.执行系统存储过程sp_help查看存储过程2的一般信息
代码及结果如下:
图四、查看存储过程2的一般信息
5.执行系统存储过程sp_helptext查看存储过程2的定义
实验内容:
本次实验之前的实验中我已经创建了mydb数据库,因此本次实验我不再提及mydb数据库的创建过程,接下来我们进入实验。
1.创建存储过程:查找1985年以后出生的学生的信息,代码及结果如下
:
图一、创建存储过程成功
2.用T-SQL语句在表department中创建插入的存储过程
代码及结果如下:
图二、创建插入的存储过程
1.创建存储过程:查找1985年以后出生的学生的信息
2.用T-SQL语句在表department中创建插入的存储过程
3.用T-SQL语句创建存储过程:要求返回指定课程的平均成绩,其中指定课程号以存储过程的输入参数进行传递。
4.执行系统存储过程sp_heቤተ መጻሕፍቲ ባይዱp查看存储过程2的一般信息
5.执行系统存储过程sp_helptext查看存储过程2的定义
《数据库系统应用设计》实验报告(六)
班级:08计科(2)班
姓名:杨进林
学号:08410902049
时间:2011-5-15
地点:综合实验楼二楼
实验成绩:优秀□良好□中□及格□不及格□
实验题目:1、存储过程的应用
实验目的:1、掌握创建存储过程的方法。
2、掌握存储过程的使用
实验要求:
在mydb数据库中:
代码及结果如下:
实验六 存储过程创建与应用
实验六存储过程创建与应用一、实验目的使学生理解存储过程的概念,掌握创建存储过程的使用、执行存储过程和查看、修改、删除存储过程的方法。
二、实验内容(1)创建存储过程student_grade,要求实现如下功能:查询“学生-课程”数据库中每个学生各门功课的成绩,其中包括每个学生的sno,sname,cname,grade。
(2)利用查询分析器创建名为proc_exp的存储过程,要求实现如下功能:从sc表中查询某一学生考试平均成绩。
(3)修改存储过程proc_exp,要求实现如下功能:输入学生学号,根据该学生所选课程的平均成绩显示提示信息,即如果平均成绩在60分以上,显示“此学生综合成绩合格,成绩为XX分”,否则显示“此学生总和成绩不合格,成绩为XX分”。
(4)创建名为proc_add的存储过程,要求实现如下功能:向sc表中添加学生成绩记录。
调用proc_add,向sc表中添加学生成绩记录。
(5)调用存储过程proc_exp,输入学生学号,显示学生综合成绩是否合格。
(6)删除刚刚创建的proc_add和proc_exp两个存储过程。
三、实验过程(1)创建存储过程student_grade:查询每个学生各门功课的成绩(部分查询结果):(2)创建存储过程proc_exp:查询某一学生考试平均成绩(部分结果):(3)修改存储过程proc_exp调用存储过程proc_exp,输入学生学号,显示学生综合成绩是否合格(4)创建名为proc_add的存储过程:添加学生记录:(5)删除刚刚创建的proc_add和proc_exp两个存储过程。
四、实验总结在创建proc_exp存储过程时,需要添加group by语句对结果进行分组,不然会出现错误。
当调用存储过程proc_exp,输入学号查询学生综合成绩是否合格时,出现错误:“Conversion failed when converting the varchar value '77.500000' to data type int.”看到该错误时自己清楚是数据类型不匹配导致,经过仔细分析之后终于明白是自己更改pro_exp存储结构中的if @avg>=60语句不正确,因为在创建表的时候,定义的学生成绩的数据类型为decimal(5,2),即最大5位数字,其中2位小数,定义的变量avg类型为varchar(20),在将该语句修改为if @avg>=60.00后,查询成功。
实验六存储过程和触发器
实验六存储过程和触发器一、目的与要求1.掌握编写数据库存储过程的方法。
2.掌握建立数据库触发器的方法,通过实验观察触发器的作用和触发条件设置等相关操作。
二、实验准备1.了解编写存储过程和调用的T-SQL语法;2.了解触发器的作用;3.了解编写触发器的T-SQL语法。
三、实验内容(一)存储过程在studentdb数据库中建立存储过程getPractice,查询指定院系(名称)(作为存储过程的输入参数)中参与“实践”课程学习的所有学生学号、姓名、所学课程编号和课程名称,若院系不存在,返回提示信息。
提示:D」nfo表中存储了院系代码D_ID,而St_lnfo表中学号字段St_ID 的前两位与之对应,则D」nfo表与St_lnfo表之间的联系通过这两个字段的运算构成连接条件。
1.分别执行存储过程getPractice,查询“法学院”和“材料科学与工程学院”的学生中参与“实践”课程的所有学生学号、姓名、所学课程编号和课程名称create procedure getPractice@D_Name varchar(30)outputasbegi nif not exists(select *from D_I nfowhere D_Name= @D_Name)print'对不起,该院系不存在’elseselect st_in fo.St_ID,C」n fo.C_No,C_Namefrom s_c_i nfo inner joi n st_i nfo on st_i nfo.St_ID=s_c_i nfo.st_id inner joi n C_I nfo on s_c_i nfo.c_ no=C_I nfo.C_Nowhere st_in fo.St_ID in(select St_IDfrom st_i nfo join D_I nfo on D_In fo.D_ID =left(st_i nfo.St_ID,2) where C」n fo.C_Type=' 实践'and D_ln fo.D_Name= @D_Name)endgo|D_常prxta ■疋不.起,该箱>-f琴址*al>d9al«e? aT_iK.fd Sc^ID. C_Inf5 ■,. C^Nasic-frcai. ■ c JJZ^O -~~-=r OJ_Z:ST LZL±== sz 3 5~. I^-.s c ZXJ E D. - z j-J.j.r-:er _ = IT.C_Inf D M aF_e_infQ B C_DO-C_1G£n C_Hcwmtre 4c_inro.sc_iDjpele = E TO±zcx sjm jciri D■ 二上u 匚二D o D_ID i 3Z _Z3Lt=-. =z_ZD^ 2 1rfbUI IJlBdEa. C_T J^P RE-' 1an± i&_lA£a.p)_JfadM" (C_lamE:«nc£print 'Xl'TiLH谪僥爲不存左"selcn a^intc-St^ID G^IinTo ■ C_IPo.ClausetTon 9 c info 1 -7 _'T at inf o ar into ■旨耳11^9 ? Into,卸睪Jt)丄2_:e J.J Jlr. C IaXg g s c l^Tg . c oo^C I D J LD.□K D■rh« z e st._j_ZL.f 3 . St_12> —njs-el—et St_£Df EMi st_infe -D 1 -1 D_Inf o> cm D_InfQ. D_IB ■ r r T■ j»e_i nf a. St_IB r 3 wn e re c_ in ire ・G_T snw 宴践-■ ru_ i ntc 匚D_NWIC- t D_w«e©口=Xed ^etfxaetlC- * 学帕g=*D皿,对不起.谨院枭序存在,s&Jec:!:ar.^inrc . Sr ID. C Tore C Eg C M址尼ircm s匚JL二£□ 丄旦二亡二二_i■二st ■L二f■口as s± zzs-fa.^" ■LAat u AEL£Q . st idC_lnf& on a_c_infc. e_nci&C_lntciX_Sowbsic f g.(Kiter s^.ezrziL rt i^.fc _ j_r. □ Xaf?1二口D Izifc Z ZZ —Left st 1E£G St _ ID 2wtie£e C_in« .C 巧!PL'实踐'二計戈ii_inro. D_»Hm±- ftijkscMendgs “心—IT科学宇目□O2.利用系统存储过程sp_rename 将getPractice 更名为getPctStuexecute sp_re name getPractice , getPctStu尹■ dbc/t_^infc JXXV417J9>tLJd«ntdb - SQLQutryl «qh 寺- ax-ac^t a vp gat Practice . 口3•修改存储过程getPctStu,返回指定院系中参与实践课程的学生人次数, 并利用该存储过程以“法学院”为输入参数验证执行的结果alter procedure getPctStu@D_Name varchar(30)asbegi nif not exists(select *from D_I nfowhere D_Name= @D_Nameprint'对不起,该院系不存在’elseselect st_in fo.St_ID,C」n fo.C_No,C_Name,co unt (st_i nfo.St_ID) as 次数from s_c_i nfo inner joi n st_i nfo on st_i nfo.St_ID=s_c_i nfo.st_id inner joi n C_I nfo on s_c_i nfo.c_ no=C_I nfo.C_Nowhere st_in fo.St_ID in(select St_IDfrom st_i nfo join D_I nfo on D_In fo.D_ID =left(st_i nfo.St_ID,2) where C」n fo.C_Type=' 实践'and D_ln fo.D_Name= @D_Name)group by st_i nfo.St_ID,C」n fo.C_No,C_NameendGoexec getPctStu '法学院'Go血十口辭皿啊砒-SQlQutryL科I" MV|print '对不I九i枣FR系尸存守"el«select 3t_lntd. 5t_I D■ &_In£o-C_Ha f C_N^me. .. ; t 3t_infO-St_lDi 璋E/•.制惜f rw >_c_info n- - JD1rt_in£o cn«t_i!nfci-3't_I&-i s i B_in.£a ■|b_Ldinjier3°in C_lnfQ OT ■.c.ipfg ・*.!^<.玉旳£.13口■where st_in.Eci 5t_ID 1 naclest 5t_lnE K=-cjkn D_ln£e g &_I K£Q■ 1>_ID *W・殆VK t'lsfc.t l¥Ft-J实霸■"二 D D W WK- St_y«icEzu—P L-J!“七_丄1让<Z 上二_丄0匕_1±注右.口C l-BJV:ttndl3UT-xec j-tBnt5tu '迭学【完・G£>□茁黑血:占豐5l」D C-Nsw ' *「企t i出:;血[5 72001 ] 如忖U (IB罷伸a i3 2KHD5-:H0~ 57ZO13. 犬宇计刘曲気14.再修改存储过程getPctStu,返回指定院系中参与实践课程的学生人数注:“人数”和“人次数”是不同的,对某一学生而言,如果参与了多门实践课程,则“人次数”是指其参与的课程门数,而“人数”仍为1。
实验六触发器、存储过程编程实验
实验六触发器、存储过程编程实验一、实验目的学习存储过程和触发器的创建和使用方法。
二、实验环境硬件:PC机软件:SQL Server 2000三、实验原理1.触发器触发器是一种特殊的过程,它不带参数,不被用户和程序调用,只能由用户对数据库中的表的操作(插入、删除、修改)触发。
因此,可以利用触发器来维护表间的数据一致性。
触发器只能在表上建立,一张表最多可有3个触发器,即插入触发器、删除触发器、修改触发器,分别由插入、删除、修改操作触发。
触发器可以查询其它表,而且可以包含复杂的SQL语句。
它们主要用于强制复杂的业务规则及数据完整性。
⑴创建触发器创建触发器时需指定:●名称。
●在其上定义触发器的表。
●触发器将何时激发。
●激活触发器的数据修改语句。
有效选项为INSERT、UPDATE或DELETE。
多个数据修改语句可激活同一个触发器。
例如,触发器可由INSERT或UPDATE语句激活。
●执行触发操作的编程语句。
语法:CREATE TRIGGER 触发器名ON {表名| 视图名}{ FOR | AFTER | INSTEAD OF } { [DELETE] [,] [INSERT] [,] [UPDATE] }ASSQL语句块RETURN⑵使用inserted和deleted表触发器语句中使用了两种特殊的表:deleted表和inserted表。
Microsoft SQL Server2000 自动创建和管理这些表。
可以使用这两个临时的驻留内存的表测试某些数据修改的效果及设置触发器操作的条件;然而,不能直接对表中的数据进行更改。
inserted 和deleted 表主要用于触发器中:●扩展表间引用完整性。
●在以视图为基础的基表中插入或更新数据。
●检查错误并基于错误采取行动。
●找到数据修改前后表状态的差异,并基于此差异采取行动。
Deleted表用于存储DELETE和UPDATE语句所影响的行的复本。
在执行DELETE 或UPDATE语句时,行从触发器表中删除,并传输到deleted表中。
存储过程设计实验报告
一、实验目的1. 掌握存储过程的基本概念、语法和创建方法;2. 学会使用存储过程进行数据的增、删、改、查操作;3. 理解存储过程在提高数据库性能、减少网络流量和代码重用性等方面的优势。
二、实验环境1. 操作系统:Windows 102. 数据库:MySQL 5.73. 开发工具:MySQL Workbench三、实验内容1. 创建一个商品信息表(product),包含商品编号(id)、商品名称(name)、商品类别(category)和价格(price)等字段。
2. 创建一个存储过程(select_product),用于查询商品信息。
(1)存储过程代码:```DELIMITER //CREATE PROCEDURE select_product(IN category_name VARCHAR(50))BEGINSELECT FROM product WHERE category = category_name;END //DELIMITER ;```(2)调用存储过程:```CALL select_product('电器');```3. 创建一个存储过程(insert_product),用于向商品信息表中插入一条数据。
(1)存储过程代码:```DELIMITER //CREATE PROCEDURE insert_product(IN p_id INT, IN p_name VARCHAR(50), INp_category VARCHAR(50), IN p_price DECIMAL(10,2))BEGININSERT INTO product (id, name, category, price) VALUES (p_id, p_name, p_category, p_price);END //DELIMITER ;```(2)调用存储过程:```CALL insert_product(10000004, '电视', '电器', 2000);```4. 创建一个存储过程(update_product),用于修改商品信息。
实验六存储过程的设计与应用
实验六 存储过程的设计与应用实验1、[实验场景]:当学期末课程教学结束后,任课老师在考试后要将学生的成绩录入到“教学管理系统”中,在随后的日期中,任课教师还要经常查询自己任教课程班的学生成绩。
请以编码为“T080040401”的课程班为例,用存储过程实现任课教师的课程班成绩查询T-SQL 语句。
图一 查询课程班的成绩解决:1、创建存储过程[参考代码]:表一 创建存储过程CourseClassGradeQuery2、执行(保存)存储过程3、执行语句:EXEC CourseClassGradeQuery拓展练习:在上述存储过程中引入一个参数,用来给存储过程传递【课程班编码】,然后存储过程再根据传递来的【课程班编码】进行相关的学生成绩查询。
请写出创建带【课程班编码】参数的存储过程的T-SQL 语句。
实验2、[实验场景]:在某个班级新生记录添加的时候,学号不用手工输入,系统将统计出这个班级已有学生的最大学号,然后在其基础上做自动加1处理后插入到学生表中。
插入学生记录的流程如图二所示。
请以班级编码为“050802”的“05软件(2)班”为例,用存储过程实现学号自增的学生记录插入功能。
图二插入学生记录的流程图[参考代码]:CREATE PROCEDURE AutoGetStuID @ClassID CHAR(6),@NewStuID CHAR(8)OUTPUTASDECLARE @MaxStuID CHAR(8),@CharTwoStuID CHAR(2),@IntTwoStuID INTSET @MaxStuID =(SELECT MAX(StuID) FROM TB_Student WHERE ClassID=@ClassID)IF @MaxStuID IS NULLSET @NewStuID = @ClassID+'01'ELSEBEGINSET @CharTwoStuId = RTRIM(@MaxStuID,7,2)SET @IntTwoStuID = CONVERT(INT,@CharTwoStuID)+1SET @CharTwoStuID = CONVERT(CHAR,@IntTwoStuID)IF LEN(@CharTwoStuID) = 1SET @CharTwoStuID='0'+@CharTwoStuIDELSESET @NewStuID = @ClassID+@CharT woStuIDEND保存后,执行:DECLARE @GetedStuID CHAR(8)EXEC AutoGetStuID '050801',@GetedStuID OUTPUTSELECT @GetedStuID AS NewStuID结果如图三所示:图三获取学生最大学号结果实验3、[实验场景]:课程班成绩录入系统后,由于系统记录的是学生的分数,而有的课程班的成绩需要用“优秀、良好、中等、及格和不及格”五个等第进行显示。
数据库实验-存储过程、触发器
group by Sno
order by sum(Grade)desc
exec total
drop proc total
执行结果:命令已成功完成。
如图:
(3)创建存储过程,查找某门课的最高分(带输入参数的存储过程)。
代码:
create proc grade1
@Cname char(20)
石家庄经济学院
实验报告
学院:信息工程学院
专业:网络工程
信息工程学院计算机实验中心制
学号
411109030110
姓名
马立杰
实验日期
2014.5.12
实验室
260
指导教师
张有华
设备编号
实验内容
实验6存储过程、触发器
一实验题目
1.存储过程的定义和使用
2.触发器的创建与使用
二实验目的
1.掌握存储过程的定义、执行和调用方法。
如图:
(5)创建存储过程,统计某门课选修的人数,将人数返回。(带返回值的存储过程)
代码:
create proc proc1
@Cno char(10),
@number int output
as
select @number=count(*)
from SC
where Cno=@Cno
group by Cno
where Sno=
(select top 1 Sno from SC
group by Sno
order by count(*) desc)
exec proc2
drop proc proc2
执行结果:命令已成功完成。
如图:
2.触发器的创建与使用
实验6 数据库实验——存储过程和触发器
实验6 存储过程和触发器一、实验目的1、加深和巩固对存储过程和触发器概念的理解。
2、掌握触发器的简单应用。
3、掌握存储过程的简单应用。
二、实验内容一)存储过程:1. 创建一存储过程,求l+2+3+…+n,并打印结果。
CREATE PROCEDURE addresultASDECLARE @n int=10,/*最后一个数*/@i int=0,@result int=0 /*结果*/BEGINWHILE(@i<=@n)BEGINSET @result=@result+@iSET @i=@i+1ENDPRINT'1+2+3+...+n的结果是:'PRINT @resultRETURN(@result)ENDGO2.调用上面的addresult存储过程,打印l十2+3+…+10的结果。
EXEC addresult3. 修改上述存储过程为addresult1,使得@n为输入参数,其具体值由用户调用此存储过程时指定。
CREATE PROCEDURE addresult1@n int=10 /*最后一个数*/ASDECLARE @i int=0,@result int=0 /*结果*/BEGINWHILE(@i<=@n)BEGINSET @result=@result+@iSET @i=@i+1ENDPRINT'1+2+3+...+n的结果是:'PRINT @resultRETURN(@result)ENDGO4. 调用上面修改后的addresult1存储过程,打印l+2+3+ (100)结果。
EXEC addresult1 1005.修改上述存储过程为addresult2,将@n参数设定默认值为10,并改设@sum为输出参数,让主程序能够接收计算结果。
CREATE PROCEDURE addresult2@n int=10,/*最后一个数*/@sum int out/*结果*/ASDECLARE @i int=0BEGINset @sum=0WHILE(@i<=@n)BEGINSET @sum=@sum+@iSET @i=@i+1ENDENDGO6.调用上面修改后的addresult2存储过程,设置变量@s接收计算l+2+3+…+10的结果。
实验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属性列的值由用户在插入、更新选课成绩时系统自动填写和更新。
6实验六 存储过程
实验六存储过程之阿布丰王创作一、实验目的(1)掌握T-SQL流控制语句。
(2)掌握创建存储过程的方法。
(3)掌握存储过程的执行方法。
(4)掌握存储过程的管理和维护。
二、实验内容1、创建简单存储过程(1)创建一个名为stu_pr的存储过程,该存储过程能查询出051班学生的所有资料,包含学生的基本信息、学生的选课信息(含未选课同学的信息)。
要求在创建存储过程前请判断该存储过程是否已创建,若已创建则先删除,并给出“已删除!”信息,否则就给出“不存在,可创建!”的信息。
if exists(select*from sysobjects where name='stu_pr'and type=' P')begindropprocedure stu_prprint'已删除!'endelseprint'不存在,可创建!'createprocedure stu_prasselectdistinct*from Studentsleftjoin SC on s.Sno=SC.Snoleftjoin Coursec on o=owhere Classno='051'执行:exec stu_pr2、创建带参数的存储过程(1)创建一个名为stu_proc1的存储过程,查询某系、某姓名的学生的学号、姓名、年龄,选修课程名、成绩。
系名和姓名在调用该存储过程时输入,其默认值分别为“%”与“林%”。
执行该存储过程,用多种参数加以测试。
if exists(select*from sysobjects where name='stu_proc1'and typ e='P')begindropprocedure stu_proc1print'已删除!'endelseprint'不存在,可创建!'createprocedure stu_proc1@sdept varchar(10)='%',@sname varchar(10)='林%'asselect Sname,s.Sno,YEAR(getdate())-YEAR(Birth)Age,Cname,Gradefrom Students,Coursec,SCwhere s.Sno=sc.Sno and o=oand s.Sname like@sname and s.Sdept like@sdept执行:①、exec stu_proc1②、exec stu_proc1@sdept='%',@sname='林%'(2)创建一个名为Student_sc的存储过程,可查询出某段学号的同学的学号、姓名、总成绩。
存储过程设计
存储过程设计一、概述存储过程是一种在数据库中存储的可重复使用的程序,它可以接受参数并返回结果。
存储过程通常用于执行复杂的数据操作和业务逻辑处理。
在设计存储过程时,需要考虑以下几个方面:输入参数、输出参数、异常处理、性能优化等。
二、输入参数输入参数是指传递给存储过程的数据,它可以是一个或多个变量。
在设计存储过程时,需要明确每个输入参数的数据类型和长度,并为每个参数定义一个有意义的名称。
例如,下面是一个接受两个整数作为输入参数的示例:CREATE PROCEDURE sp_Add @num1 INT, @num2 INTASBEGIN-- 存储过程代码END三、输出参数输出参数是指从存储过程返回给调用者的数据。
与输入参数类似,输出参数也需要明确其数据类型和长度,并为其定义一个有意义的名称。
例如,下面是一个返回两个整数之和作为输出参数的示例:CREATE PROCEDURE sp_Add @num1 INT, @num2 INT, @sum INT OUTPUTASBEGINSET @sum = @num1 + @num2END四、异常处理异常处理是指在存储过程执行期间出现错误时如何处理这些错误。
通常情况下,可以使用TRY…CATCH 语句来捕获并处理异常。
例如,下面是一个使用TRY…CATCH 语句处理异常的示例:CREATE PROCEDURE sp_Add @num1 INT, @num2 INT, @sumINT OUTPUTASBEGINBEGIN TRYSET @sum = @num1 + @num2END TRYBEGIN CATCH-- 处理异常代码END CATCHEND五、性能优化性能优化是指在设计存储过程时如何使其具有更好的性能。
通常情况下,可以采用以下几种方法来提高存储过程的性能:1. 使用适当的数据类型和长度。
2. 避免使用不必要的循环和条件语句。
3. 使用索引来加速查询操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嘉应学院计算机学院
2012年 12月12日
一、实验目的
通过实验掌握SQL SERVER存储过程的基本设计方法。
二、实验原理
存储过程是保存起来的可以接受和返回用户提供的参数的
Transact-SQL 语句的集合,它被编译并存储为一个单一的数据库对象,可用存储过程实现批处理。
可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程)。
游标(Cursor)它使用户可逐行访问由数据库返回的结果集。
使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。
基本语法:
create procedure 存储过程名 (参数表 )
as
t_sql语句的集合
t_sql语句除SQL语句外,还可包括声明变量,流控制语句及游标等。
(注意:t_sql语句在不同的数据库系统中,语法不同)
三、实验环境
操作系统:Windows Server 2003 、Windows 7
编译环境:SQL Server Enterprise Manager
数据库管理系统:Microsoft SQL Server 2005
四、实验步骤及内容
1. 了解T_SQL语法
(1)变量
A.局部变量
例如:declare @v_sno nvarchar(20), @v_grade float /* 声明了两个局部变量 */
B.全局变量
如:@@error, @@fetch_status
C.表变量
声明表类型变量的语句将该变量初始化为一个具有指定结构的空表。
例如:
declare @Mytab table
(id int primary key,
books varchar(15)
)
insert @Mytab values(1,'9901')
insert @Mytab values(2,'9902')
select * from @Mytab
(2) 流控制语句
begin ... end
if .. else
while ... break
break
continue
goto
waitfor
if @@error<>0 goto prog1 select * from course if @@error<>0 goto prog2 select * from course prog1:
select * from sc
prog2:
select * from student
waitfor delay '00:01:00' select * from sc
2. 创建存储过程步骤
1) 写SQL语句
例如:查询所有学生的记录
select * from student
2) 测试SQL语句
执行这些S Q L语句。
确认符合要求。
3) 若得到所需结果,则创建过程
如果发现符合要求,则按照存储过程的语法,定义该存储过程。
create procedure dem1 as select * from student
4) 执行过程
执行存储过程,验证正确性。
EXEC dem1
检查是否已经存在存储过程
例如:检查是否已经存在spp,如果存在则删除它。
if exists (SELECT name FROM sysobjects WHERE name = 'spp' AND type = 'P') drop procedure spp
3. 无参数传递存储过程
执行时,不需要向存储过程传递参数。
先阅读下列程序,并且运行之,如果结果正确,将其写入存储过程SPP1中。
select * from sc
WHILE (SELECT AVG(grade) FROM sc) < 90
BEGIN
UPDATE sc
SET grade = grade*1.1
SELECT MAX(grade) FROM sc
IF (SELECT MAX(grade) FROM sc) > 98
BREAK
ELSE
CONTINUE
END
请注意观察结果。
4. 带参数传递存储过程
创建存储过程:
阅读并试运行下列程序:
create procedure dem1 (@sno1 char(20))
as
select avg(grade),@sno1 from sc where sno=@sno1 group by sno
执行存储过程:
exec dem1 95001
记录结果。
请通过该存储过程查询95002的平均成绩。
5. 游标
创建下列存储过程,运行并观测结果。
fetch 语句提取游标中指定的行:
fetch [[next|prior|first|last|absolute {n|@nvar}|Relative {n|@nvar}]
from
]
[@cursor_variable_name}
[into @variable_name]
@@fetch_status是一个函数(或全局变量),它返回在当前连接期间执行的最后一条fetch语句的执行状态。
执行状态 0 表示提取完全成功; -1 读取失败;-2 记录丢失。
close语句
关闭一个打开的游标,释放当前的记录集。
deallocate语句
close执行后,游标结构仍然存在,还可以再次打开,如果不再使用,用deallocate 语句删除该结构。
CREATE PROCEDURE t_cursor
AS
declare @v_sno nvarchar(20), @v_grade float /* 声明变量 */
declare @mycursor cursor /* 声明变量@mycursor 为游标 */
set @mycursor=cursor for select sno,grade from sc
where cno in(select cno from course where cname='数据库') /* 将查询结果赋予游标 */
open @mycursor /* 开启游标 */
fetch next from @mycursor /* 提取指定行 */
into @v_sno,@v_grade /* 将提取的结果赋予变量 */
print '游标成功取出一条数据'
print @v_sno
print @v_grade
while(@@fetch_status = 0) /* 将提取的结果赋予变量 */
begin
Update SC set grade=grade+@v_grade where sno=@v_sno
fetch next from @mycursor into @v_sno,@v_grade
end
close @mycursor /* 关闭一个打开的游标,释放当前的记录集 */
deallocate @mycursor /* 删除游标结构 */
6.设计带参数传递存储过程
(1)将XXX同学的成绩都减少10分。
(2)查询XXXX系XXXX课程的姓名、课程名和成绩。
五、结论
根据实验目的和实验内容,通过实验掌握SQL SERVER存储过程的基本设计方法。
在基本原理中,我们可以进一步了解存储过程和游标的相关概念描述,按照步骤与实验内容完成本实验。
在实验中,了解了T_SQl语法并执行了T_SQl语句,测试了带参数以及不带参数的存储过程,总的来说,本次实验除了个别题有请教过同学,基本上都是自己独立完成的,有点小小成就感。