数据库实验报告六_存储过程
实验六 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、熟悉存储过程基本概念和类型。
储存过程实验报告

一、实验背景随着数据库技术的不断发展,数据库管理系统(DBMS)的功能日益强大,存储过程作为一种重要的数据库对象,在数据库应用中扮演着越来越重要的角色。
存储过程能够封装复杂的业务逻辑,提高数据库性能,增强数据安全性。
本实验旨在通过实际操作,掌握存储过程的创建、执行和管理方法,提高数据库应用开发能力。
二、实验目的1. 理解存储过程的概念和作用。
2. 掌握存储过程的创建、执行和管理方法。
3. 学会使用存储过程优化数据库性能。
4. 提高数据安全性。
三、实验环境1. 操作系统:Windows 102. 数据库:MySQL 5.73. 编程语言:MySQL四、实验内容1. 创建存储过程2. 调用存储过程3. 管理存储过程4. 优化存储过程性能五、实验步骤1. 创建存储过程(1)创建一个名为“get_user_info”的存储过程,用于查询用户信息。
```sqlDELIMITER //CREATE PROCEDURE get_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 username VARCHAR(50), IN email VARCHAR(100))BEGINUPDATE users SET username = username, email = email WHERE id = user_id;END //DELIMITER ;```2. 调用存储过程(1)调用“get_user_info”存储过程查询用户信息。
```sqlCALL get_user_info(1);```(2)调用“update_user_info”存储过程更新用户信息。
厦门理工数据库原理与应用实验报告06

《数据库原理与应用》实验报告
2.创建一个存储过程
四、实验结果与数据处理
实验6.1 创建并执行存储过程
1.用企业管理器创建并执行一存储过程
2.用SQL创建一存储过程
实验6.2 修改存储过程
1.用企业管理器修改存储过程Prc_Qsinf。
存储过程的定义如下:
2.用SQL修改存储过程Prc_Qsinf。
.
实验 6.3 删除存储过程
1.用企业管理器删除存储过程Pro_Qsinf;
2.用SQL删除存储过程Pro_Qscore。
实验6.4 T-SQL程序设计逻辑
1.计算1~100之间所有能被3整除的数的个数和总和。
2.求学生表中选取SNO,SEX,如果为“男”则输出“M”,如果为“女”则输出“F”
实验6.5 面向复杂的T-SQL程序设计
1.从教学数据库jxsk中查询所有同学选课成绩情况:姓名、课程名、成绩。
要求:凡成绩为空者输出“未考”、小于60分的输出“不及格”;60分至70分的输出“及格”;70分至80分的输出“中”;80分至90分的输出“良好”;90分至100分的输出“优秀”。
并且输出记录按下列要求排序:先按SNO升序,再按CNO号升序,最后按成绩降序。
2.现给教师增加工资的操作
实验6.6 使用游标1.定义一个游标
2.创建一个存储过程
五、分析与讨论
能够参照课本完成实验。
数据库实验报告(6)

数据库实验报告(6)一实验题目1.存储过程的定义和使用2。
触发器的创建和使用二实验目的1.掌握存储过程的定义、执行和调用方法。
2.掌握触发器的创建和使用。
三实验内容1.存储过程的定义和使用(1)创建存储过程查找姓李的学生的选修课成绩信息。
(2)创建一个存储过程,计算每个学生选修课的总分,并显示得分最高的三名学生的分数。
(3)创建一个存储过程以查找课程的最高分数(带有输入参数的存储过程)。
(4)创建一个存储过程来计算同学的平均分数并返回统计结果。
(带输入和输出参数的存储过程)(5)创建一个存储过程,计算选修课的数量,然后返回数字。
(6)用存储过程统计选修课,用存储值最多的学生。
(存储过程的嵌套)2.触发器的创建与使用(1)如果学分大于5,在为表格C插入新课程信息时,定义行前级别的触发学分uu触发器分,自动修改为5分。
(2)定义行后级别触发器。
当SC表的等级发生变化时,它将自动出现在等级变化表SC_uu增加日志中加一条新的纪录,该新纪录包括:操作者名称、操作日期、操作类型。
(3)建立一个delete触发器,针对于sc表,每次只能删除一条信息。
(4)创建不允许用户更改学号的更新触发器。
如果学生号被更改,将给出提示信息:学生号不允许更改。
(5)执行相应的SQL语句来触发上面定义的触发器。
(6)删除触发信用触发四实验步骤1.存储过程的定义和格式:createproc[edure]procedure_name[;number][{@parameterdata_type}[变化][=默认值][输出][with[用于复制]assql_statement[...n]创建存储过程以查找姓李的学生的选修课分数信息。
(1)创建存储过程,统计每个学生的选修课的总成绩,显示成绩最好的前3名学生成绩。
SC表的基本信息如图1所示:图表1代码:createprocp_sumscoreas从SCGroupByNo中选择Top 3Sum(成绩)作为总分execp_sumscore运行结果:命令已成功完成。
存储过程操作实验报告

一、实验模块数据库原理与应用二、实验标题存储过程操作实验三、实验内容1. 实验目的(1)掌握存储过程的概念和作用。
(2)学会创建和使用存储过程。
(3)了解存储过程与触发器的区别。
2. 实验原理存储过程是一组为了完成特定功能的SQL语句集,存储在数据库中供应用程序调用。
它可以提高数据库性能,简化代码编写,提高安全性。
3. 实验步骤(1)创建数据库```sqlCREATE DATABASE IF NOT EXISTS experiment;USE experiment;```(2)创建表```sqlCREATE TABLE IF NOT EXISTS employee (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50),age INT,department_id INT);CREATE TABLE IF NOT EXISTS department (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50));```(3)插入数据```sqlINSERT INTO employee (name, age, department_id) VALUES ('张三', 25, 1),('李四', 30, 2),('王五', 28, 3);INSERT INTO department (name) VALUES ('技术部'),('业务部'),('售后部');```(4)创建存储过程```sqlDELIMITER //CREATE PROCEDURE get_department_name(IN emp_id INT, OUT dept_name VARCHAR(50))BEGINSELECT INTO dept_name FROM employee e INNER JOIN department d ON e.department_id = d.id WHERE e.id = emp_id;END //DELIMITER ;```(5)调用存储过程```sqlCALL get_department_name(1, @dept_name);SELECT @dept_name AS department_name;```(6)创建触发器```sqlDELIMITER //CREATE TRIGGER before_employee_insertBEFORE INSERT ON employeeFOR EACH ROWBEGINIF NEW.age < 20 THENSIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '年龄不能小于20岁'; END IF;END //DELIMITER ;```(7)尝试插入年龄小于20岁的数据```sqlINSERT INTO employee (name, age, department_id) VALUES ('赵六', 18, 1);```4. 实验结果与分析(1)成功创建存储过程和触发器。
存储过程实验报告

存储过程实验报告一、实验目的本次实验旨在深入了解和掌握存储过程的基本概念、功能及其在数据库管理中的应用。
通过实际操作和实践,提高对存储过程的编写、调试和优化能力,为今后在数据库相关项目中的高效开发和应用奠定坚实的基础。
二、实验环境本次实验使用的数据库管理系统为 MySQL 80,操作系统为Windows 10。
开发工具使用了 MySQL Workbench 80。
三、实验内容(一)创建简单的存储过程创建一个存储过程,用于计算两个整数的和。
以下是创建存储过程的代码:```sqlDELIMITER //CREATE PROCEDURE add_numbers(IN num1 INT, IN num2 INT, OUT sum INT)BEGINSET sum = num1 + num2;END //DELIMITER ;```(二)调用存储过程使用以下代码调用上述创建的存储过程:```sqlCALL add_numbers(5, 10, @result);SELECT @result;```(三)带有条件判断的存储过程创建一个存储过程,根据传入的学生成绩判断其等级。
如果成绩大于等于 90 为“优秀”,大于等于 80 小于 90 为“良好”,大于等于 60 小于80 为“及格”,小于 60 为“不及格”。
以下是存储过程的代码:```sqlDELIMITER //CREATE PROCEDURE grade_judge(IN score INT, OUT grade VARCHAR(10))BEGINIF score >= 90 THENSET grade ='优秀';ELSEIF score >= 80 AND score < 90 THEN SET grade ='良好';ELSEIF score >= 60 AND score < 80 THEN SET grade ='及格';ELSESET grade ='不及格';END IF;END //DELIMITER ;```调用该存储过程的代码如下:```sqlCALL grade_judge(85, @result_grade);SELECT @result_grade;```(四)带有循环的存储过程创建一个存储过程,计算 1 到 100 的整数之和。
实验存储过程实验报告

一、实验目的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. 在实际开发过程中,合理使用存储过程可以简化数据库操作,提高应用程序的性能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
HUNAN UNIVERSITY
数据库
实验报告
学生姓名
学生学号
专业班级
指导老师
2017 年5月24日
SELECT COUNT(*)INTO more90 FROM sc
WHERE cno = countcno AND grade >= 90;
/*将结果存入新表sumScore中*/
create table sumScore( scorestage char(10), number smallint);
insert into sumScore values('x<60', less60);
insert into sumScore values('60<=x<70', b60a70);
insert into sumScore values('70<=x<80', b70a80);
insert into sumScore values('80<=x<90', b80a90);
insert into sumScore values('x>=90', more90);
END$$
call sumScore(); /*调用上述存储过程*/
首先创建存储过程,然后再调用存储过程。
结果如下:
(上述结果图截自Navicat软件)
可以看到,在stuinfo中新建了一个基本表sumscore,表中内容是数学课程成绩的各分数段的人数。
2、统计任意一门课的平均成绩。
代码如下:
DELIMITER $$
CREATE PROCEDURE `scoreAvg`()
BEGIN
declare curname char(40) default null; /*临时存放课程名*/
declare curcno char(4) default null; /*临时存放课程号*/
declare curavg float; /*临时存放平均成绩*/
declare mycursor cursor for /*定义游标*/
select cno, cname from course;
declare continue handler for not found set curavg=-1;
open mycursor; /*打开游标*/
fetch mycursor into curcno,curname; /*从结果集中取第一条记录到临时变量中*/ repeat /*重复取记录*/
select avg(grade) into curavg from sc where cno = curcno;
insert into scoreAvg values(curcno,curname,curavg); /*将结果存入新表scoreAvg中*/ fetch mycursor into curcno,curname;
until curavg=-1
end repeat;
close mycursor; /*关闭游标*/
END$$
call scoreAvg(); /*调用上述存储过程*/
首先创建存储过程,然后再调用存储过程。
结果如下:
可以看到,在stuinfo中新建了一个基本表scoreavg,表中内容是各课程的平均成绩。
3、将学生选课成绩从百分制改为等级制(即A、B、C、D、E)。
代码如下:
DELIMITER $$
CREATE PROCEDURE `changeRank`()/*改变成绩等级*/
BEGIN
declare chgrade char(1) default null; /*临时存放新的成绩等级*/
declare curcno smallint(6); /*临时存放课程号*/
declare curgrade int; /*临时存放成绩*/
declare flag int default 0;
declare mycursor cursor for
select cno,grade from sc; /*定义游标*/
declare continue handler for not found set flag=-1;
/*在sc表中新建一列,用于存放新的成绩等级*/
alter table sc add column(newgrade char(1));
open mycursor; /*打开游标*/
fetch mycursor into curcno,curgrade;
repeat /*当游标打开时进行下列循环处理*/
if curgrade < 60 then
set chgrade = 'E';
elseif curgrade < 70 then
set chgrade = 'D';
elseif curgrade < 80 then
set chgrade = 'C';
elseif curgrade < 90 then
set chgrade = 'B';
else
set chgrade = 'A';
end if;
update sc set newgrade=chgrade where cno=curcno and grade=curgrade;
fetch mycursor into curcno,curgrade;
until flag=-1 /*直到游标指向空记录*/
end repeat;
close mycursor; /*关闭游标*/
select * from sc;
END$$
SET SQL_SAFE_UPDATES=0; /*此步骤是必要的,否则将无法修改sc表*/
call changeRank(); /*调用上述存储过程*/
alter table sc
drop column newgrade;/*在调用该存储过程前,需要先执行此语句,因为在创建存储过程时已经在sc表中添加了这个属性*/
首先创建存储过程,然后再调用存储过程,结果如下:
附录:MySQL源代码。