实验五存储过程
网络存储过程实验报告(3篇)

第1篇一、实验背景随着互联网技术的快速发展,数据存储和传输已成为网络通信中的关键环节。
网络存储过程是数据库中的一种高级应用,它可以将多个SQL语句封装成一个存储过程,从而实现数据库的自动化管理和提高数据库的执行效率。
本实验旨在通过实践,掌握网络存储过程的创建、调用和优化方法。
二、实验目的1. 了解网络存储过程的基本概念和特点。
2. 掌握网络存储过程的创建方法。
3. 熟悉网络存储过程的调用和优化技巧。
4. 通过实验,提高数据库管理能力。
三、实验环境1. 操作系统:Windows 102. 数据库管理系统:MySQL 5.73. 实验工具:MySQL Workbench四、实验内容1. 创建网络存储过程(1)创建一个名为“select_user_info”的存储过程,用于查询用户信息。
```sqlDELIMITER //CREATE PROCEDURE select_user_info(IN user_id INT)BEGINSELECT FROM users WHERE id = user_id;END //DELIMITER ;```(2)创建一个名为“update_user_info”的存储过程,用于更新用户信息。
```sqlDELIMITER //CREATE PROCEDURE update_user_info(IN user_id INT, IN user_name VARCHAR(50), IN user_age INT)BEGINUPDATE users SET name = user_name, age = user_age WHERE id = user_id;END //DELIMITER ;```2. 调用网络存储过程(1)调用“select_user_info”存储过程,查询用户ID为1的用户信息。
```sqlCALL select_user_info(1);```(2)调用“update_user_info”存储过程,更新用户ID为1的用户信息。
实验五 存储过程

实验五存储过程的创建与调用一.实验目的:了解存储过程的概念和作用,掌握创建存储过程的方法,为后继学习作准备。
二.实验属性:设计性。
三.实验仪器设备及器材:装有.NET和SQL Server的电脑。
四.实验要求程序的主界面图1.11、利用存储过程,给student表添加一条学生信息。
建立存储过程stu_insertUSE[sheng]GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER PROCEDURE[dbo].[stu_insert]@Sno char(10)= 0,@Sname char(10)= 0,@Ssex char(10)= 0,@Sage smallint= 0,@Sdept char(10)=0ASBEGINSET NOCOUNT ON;insertinto Studentvalues(@Sno,@Sname,@Ssex,@Sage,@Sdept)END在添加Button上添加时间处理程序//SqlConnection sqlconn = new SqlConnection(conn);string sno,sname,ssex,sage,sdept;sno=textBox1.Text.ToString();sname=textBox2.Text.ToString();ssex=textBox3.Text.ToString();sage=textBox4.Text.ToString();sdept=textBox5.Text.ToString();SqlCommand cmd = new SqlCommand();cmd.Connection = conn;mandText = "stu_insert";mandType = CommandType.StoredProcedure;IDataParameter[] parameters = {new SqlParameter("@Sno", SqlDbType.Char,4),new SqlParameter("@Sname", SqlDbType.Char,4) ,new SqlParameter("@Ssex", SqlDbType.Char,10) ,new SqlParameter("@Sage", SqlDbType.Int,10) ,new SqlParameter("@Sdept", SqlDbType.Char,15) ,};conn.Open();cmd.Parameters.Add("@Sno", SqlDbType.VarChar).Value = sno;cmd.Parameters.Add("@Sname", SqlDbType.VarChar).Value = sname; cmd.Parameters.Add("@Ssex", SqlDbType.VarChar).Value = ssex; cmd.Parameters.Add("@Sage", SqlDbType.VarChar).Value = sage; cmd.Parameters.Add("@Sdept", SqlDbType.VarChar).Value = sdept; cmd.ExecuteNonQuery().ToString();conn.Close();执行结果图1.22、利用存储过程从student、course、sc表的连接中返回所有学生的学号、姓名、所选课程及成绩。
存储过程和触发器实验心得

存储过程和触发器实验心得1、PLSQL创建储存过程编译出错不会给出错误提示,导致调用时提示储存过程处于无效状态。
解决方案:使用SQLPLUS,不过SQLPLUS只会提示编译错误,不会提示具体原因,还可以使用Navicat工具,Navicat会给出更加详细的错误原因。
2、创建储存过程时,设置变量参数类型时,指定了字符长度导致创建失败。
解决方案:直接设置变量数据类型,不设置其字符长度。
3、使用TO_DATE(SYSDATE,‘YYYY/MM/DD’)获取当前日期作为借阅日期导致调用借书储存过程失败,提示参数类型错误。
解决方案:因为TO_DATE()函数是将字符类型转换成日期类型,而SYSDATE本来就是日期类型,所以导致调用失败,使用TO_DATE(TO_CHAR(SYSDATE,‘YYYY/MM/DD’),‘YYYY/MM/DD ’)将SYSDATE转换成字符类型再转换成日期类型。
4、使用DBMS_OUTPUT.PUT_LINE()函数输出提示,没有反应。
解决方案:在SQLPLUS中需要先使用SET SERVEROUTPUT ON;打开输出模式才能看见输出,而在PLSQL中输出的内容在另一个Output窗口中,而不是没有反应。
5、创建自动递增借阅流水号的触发器时,使用NEW关键字改变借阅流水号,导致创建触发器失败,解决方案:使用NEW关键字时,需要在前面加一个“:”号,如“:NEW.借阅流水号”。
6、调用修改后的借书储存过程时,发送错误,提示违反唯一约束条件以及COMMIT;不能再触发器中使用。
解决方案:删除在触发器中的COMMIT;,然后删除序列“借阅流水号序列”,重新创建序列“借阅流水号序列”,并且设置初始值为8,因为借阅表中已经有借阅流水号1到7的数据了,然后创建序列时未指定初始值,序列默认从1开始,导致违反唯一约束条件,从而导致调用储存过程失败。
四、实验心得体会通过本次实验,学会了储存过程以及触发器和序列的使用方法,对存储过程有了一个直观的认识,对触发器的工作原理和作用有了更加深刻的认识,使用触发器可以在修改数据前后规范数据,使数据规范化和标准化。
存储过程和触发器(数据库实验5)

数据库基础与实践实验报告实验五存储过程和触发器班级:惠普测试142学号:**********姓名:***日期:2016-11-141 实验目的:1)掌握SQL进行存储过程创建和调用的方法;2)掌握SQL进行触发器定义的方法,理解触发器的工作原理;3)掌握触发器禁用和重新启用的方法。
2 实验平台:操作系统:Windows xp。
实验环境:SQL Server 2000以上版本。
3 实验内容与步骤利用实验一创建的sch_id数据库完成下列实验内容。
1.创建存储过程JSXX_PROC,调用该存储过程时可显示各任课教师姓名及其所教课程名称。
存储过程定义代码:CREATE PROCEDURE JSXX_PROCASSELECT tn 教师姓名,cn 所教课程FROM T,TC,C WHERE T.tno=TC.tno AND o=o存储过程执行语句与执行结果截图:EXECUTE JSXX_PROC2.创建存储过程XM_PROC,该存储过程可根据输入参数(学生姓名)查询并显示该学生的学号、所学课程名称和成绩;如果没有该姓名学生,则提示“无该姓名的同学”。
存储过程定义代码:CREATE PROCEDURE XM_PROC @sname VARCHAR(100)ASBEGINIF EXISTS(SELECT NULL FROM S WHERE sn=@sname)SELECT S.sno 学号,cn 课程,score 成绩FROM S,SC,C WHERE o=o AND SC.sno=S.sno ANDS.sn=@snameELSEPRINT'无该姓名的同学。
'END运行截图:3.创建存储过程XBNL_PROC,该存储过程可根据输入参数(专业名词,默认值为计算机专业),统计并显示该专业各年龄段男、女生人数。
如果没有该专业,则显示“无此专业”。
存储过程定义代码:CREATE PROCEDURE XBNL_PROC@departName VARCHAR(30)='计算机',@begin INT,@end INTASDECLARE @numOfBoys INTDECLARE @numOfGirls INTDECLARE @d# VARCHAR(3)DECLARE @result VARCHAR(50)BEGINSELECT @d# = dno FROM D WHERE dn=@departNameIF @d# IS NOT NULLBEGINSELECT @numOfBoys =COUNT(sno)FROM S WHERE age BETWEEN @begin AND @end AND dno=@d# AND sex='男'SELECT@numOfGirls =COUNT(sno)FROM S WHERE age BETWEEN@begin AND@end AND dno=@d# AND sex='女'SET @result = @departName+'专业年龄在'+CAST(@begin AS VARCHAR(3))+'-'+CAST(@end AS VARCHAR(3))+'之间的男生有'+CAST(@numOfBoys AS VARCHAR(3))+'人,'+'女生有'+CAST(@numOfGirls AS VARCHAR(3))+'人'ENDELSESET @result='无此专业。
数据库存储过程实验报告

数据库存储过程实验报告一、实验目的理解存储过程的概念、建立和调用方法。
二、实验环境三、实验示例1、定义一个函数,按性别计算所有学生的平均年龄。
CREATE FUNCTION aver_age(@sex char(2)) RETURNS int ASBEGINDECLARE @aver intSELECT @aver=( SELECT avg(年龄)FROM sWHERE sex=@SEX)RETURN @averENDGO如下程序对上例定义的aver_age函数进行调用。
USE student /*用户函数在此数据库中已定义*//*定义局部变量*/DECLARE @sex char(2)DECLARE @aver1 int/*给局部变量赋值*/SELECT @sex = ‘女’SELECT @aver1=dbo.aver_age(@sex) /*调用用户函数,并将返回值赋给局部变量*//*显示局部变量的值*/SELECT @aver1 AS '男性学生的平均年龄'2、利用student数据库中的S、SC表,编写一无参存储过程用于查询每个学生的选课情况,然后调用该存储过程。
CREATE PROCEDURE xuanke_infoASSELECT S.#,sname,sex,age,c#,scoreFROM S INNER JOIN scON s.s#=sc.s#GO3、使用带参数的存储过程创建存储过程,根据student数据库的3个表查询指定学生的选课情况。
CREATE PROCEDURE stu_info @sname (8)ASSELECT S.#,sname,sex,age,c#,cname,scoreFROM S,SC,CWhere s.s#=sc.s# and sc.c#=c.c# and sname=@snameGOEXECUTE stu_info '张三'4、使用带OUTPUT参数的存储过程编写存储过程,根据给定的学生学号,计算该生的平均成绩Create procedure stuavg @sno char(4) @s_sum float output,@s_avg float outputAsSelect @s_sum=sum(score),s_avg=avg(score)From scWhere s#=@sno在调用存储过程stuavg时,存储过程定义时的形参名和调用时的变量名不一定要匹配,不过数据类型和参数位置必须匹配。
存储过程的使用 实验报告

USEypp7
--声明四个变量,用于保存输入和输出参数
DECLARE@KECHENGMINGvarchar(20)
DECLARE@AVGCHENGJI1tinyint
DECLARE@MAXCHENGJI1tinyint
DECLARE@MINCHENGJI1tinyint
--为输入参数赋值
SELECT@KECHENGMING='高等数学'
--声明四个变量,用于保存输入和输出参数
DECLARE@KECHENGMINGvarchar(20)
DECLARE@AVGCHENGJI1tinyint
DECLARE@MAXCHENGJI1tinyint
DECLARE@MINCHENGJI1tinyint
--为输入参数赋值
SELECT@KECHENGMING='计算机基础'
1.使用if exists语句,如果存储过程“单科成绩分析”存在,就将其删除;
2.使用create proc语句创建存储过程;
3.定义所需要的输入参数和输出参数;
4.声明4个变量来保存输入和输出参数;
5.执行存储过程并显示结果。
同时,值得注意的是,在创建存储过程时,应该注意一些细节,如单词的拼写要准确无误,程序中用的是单引号而不是双引号等等。
--执行存储过程
EXEC单科成绩分析@KECHENGMING,
@AVGCHENGJI1OUTPUT,
@MAXCHENGJI1OUTPUT,
@MINCHENGJI1OUTPUT
--显示结果
SELECT@KECHENGMINGAS课程名,@AVGCHENGJI1AS平均成绩,@MAXCHENGJI1AS最高成绩,
实验训练5:存储过程与函数的构建与使用

实验训练5:存储过程与函数的构建与使用一、存储过程与函数的概念存储过程和函数都是数据库中的可执行代码,可以被多次调用和重复使用。
存储过程是一组预定义的SQL语句集合,可以在数据库中定义和存储。
而函数是一个独立的代码块,它接收输入参数并返回一个值。
二、存储过程的构建与使用1. 创建存储过程在MySQL中,创建存储过程需要使用CREATE PROCEDURE语句。
例如:CREATE PROCEDURE myproc()BEGINSELECT * FROM mytable;END;这个例子创建了一个名为myproc的存储过程,它会查询mytable表中的所有数据。
2. 调用存储过程使用CALL语句可以调用已经创建好的存储过程。
例如:CALL myproc();这个语句会执行myproc存储过程中定义的SQL语句。
3. 存储过程参数我们可以给存储过程添加参数来使其更加灵活。
例如:CREATE PROCEDURE myproc(IN p1 INT, IN p2 VARCHAR(50)) BEGINSELECT * FROM mytable WHERE column1 = p1 AND column2 = p2;END;这个例子创建了一个带有两个输入参数p1和p2的存储过程,它会查询mytable表中column1等于p1并且column2等于p2的数据。
4. 存储过程变量除了参数之外,存储过程还可以使用变量来存储中间结果。
例如:CREATE PROCEDURE myproc(IN p1 INT)BEGINDECLARE v1 INT;SET v1 = p1 * 2;SELECT * FROM mytable WHERE column1 = v1;END;这个例子创建了一个带有一个输入参数p1和一个变量v1的存储过程,它会将p1乘以2并将结果存储在v1变量中,然后查询mytable表中column1等于v1的数据。
实验5 存储过程

实验报告5课程数据库原理与应用实验名称存储过程专业班级学号姓名实验日期:年月日评分一、实验目的1.掌握编写存储过程和用户自定义函数的SQL语法;2.掌握存储过程调用方法,以及参数的传递与返回值。
3.掌握局部变量的声明、赋值和使用。
4.掌握流程控制,if语句、case语句的使用。
5.掌握游标的使用方法。
二、实验内容1.创建存储过程,指定输入参数、输出参数、返回值等。
2.调用存储过程,验证结果。
3.修改、删除存储过程。
4.设计和应用游标进行查询记录的处理。
三、实验环境(1)硬件:PC机(2)软件:Windows 操作系统、MySQL或SQL Server四、实验步骤(描述实验步骤及中间的结果或现象。
在实验中做了什么事情,怎么做的,发生的现象和中间结果)1.创建并执行存储过程。
(1)根据学生表,创建存储过程,根据学号(输入参数)能从学生表中查询学生的姓名、性别和出生年份(调用系统函数year()和now()(选做));CREATE PROCEDURE a_stu(IN iSno char(10))BEGINSELECT Sno,sname,ssex FROM studentwhere Sno=iSno;END;call a_stu(‘200215121’);⏹(2)根据学生表,创建一存储过程,能向学生表中插入一名新学生的记录,学生的学号、姓名、性别……等信息以参数形式给出。
⏹(3)创建一存储过程,根据学生的学号和课程名检索该生该课程的成绩,要求将成绩设计为输出参数的形式;2.设计和应用游标,要求能实现:⏹(1)使用游标,统计每门课程的选修人数,并将结果存入表tb_AvgGrade(该表包括课程号、课程名、选修人数3个属性),没有人选修的课程选修人数设为0。
3.创建用户自定义函数,要求能实现:⏹(1)根据输入的课程号,统计该课程平均成绩,并返回该值。
五、实验结果与讨论(描述最终得到的结果,并进行分析说明,可能的误差原因)六、总结(说明实验过程中遇到的问题及解决办法;新发现或个人的收获;未解决/需进一步研讨的问题或建议新实验方法等)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
--(一)存储过程
--1、.对学生课程数据库,编写三个存储过程,分别完成下面功能:
--1)统计某一门课的成绩分布情况,即按照各分数段统计人数。
use StuDB
go
create procedure tongji
as
select cno,count(case when grade<60 then 1 end)不及格,
count(case when
grade<70 and grade>=60 then1 end)及格,
count(case when
grade<80 and grade>=70 then1 end)中,
count(case when
grade<90 and grade>=80 then1 end)良,
count(case when
grade<=100 and grade>=90 then 1 end)优
from sc
group by cno
go
exec tongji
go
--2)将学生选课成绩从百分制改为等级制(即A、B、C、D、E五级)。
create procedure dengji
as
select sc.*,等级评价=
case
when grade<60 then'E'
when grade>=60 and grade<70 then'D'
when grade>=70 and grade<80 then'C'
when grade>=80 and grade<90 then'B'
when grade>=90 and grade<=100 then'A'
end
from sc
go
exec dengji
go
--2、对SPJ数据库,创建一个存储过程
ins_s_count,功能为根据提供的供应商号,供应商名,供应商所在地等信息,
--往S表中插入数据,并返回插入该记录之
后,S表中的记录数。
--调用该存储过程实现往S表中插入一条记录(‘S6’,’天盛’,‘’‘福州’),并显示插入该记录之后,S表中的记录数。
use spj
go
alter procedure ins_s_count
@sno varchar(20),@sname
varchar(40),@status int,@city varchar(20)
as
select*
from s
insert
into
s(sno,sname,status,city)
values(@sno,@sname,@status,@cit y)
select count(sno)
from s
go
exec ins_s_count 'S6','天盛',40,'福州'
--3、查看存储过程的定义和内容
exec sp_helptext ins_s_count
--4、调用存储过程
--(二)用户自定义函数
--1. 创建一个返回标量值的用户定义函数RectangleArea:
--输入矩形的长和宽就能计算矩形的面积。
自选种实例调用该函数。
create function
RectangleArea(@long int,@wide int)
returns int
begin
return @long*@wide
end
select dbo.RectangleArea(5,2) --2. 创建一个用户自定义函数,功能为产生一张有关学生成绩统计的报表。
--该报表显示每一门课程的课程号、课程名、选修人数、本门最高分、最低分和平均分。
--调用这个函数,生成相应的报表并给用户浏览。
create function baobiao() returns table
as
return(select o 课程号,cname 课程名,count(o)选修人数,max(grade)最高
分,min(grade)最低分,
avg(grade)平均分
from sc,course
where o=o
group by o,cname) select*
from baobiao()。