数据库实验报告六_存储过程

合集下载

实验六 MySql存储过程

实验六 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

厦门理工数据库原理与应用实验报告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)

数据库实验报告(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. 在实际开发过程中,合理使用存储过程可以简化数据库操作,提高应用程序的性能。

实验6存储过程的应用-实验报告

实验6存储过程的应用-实验报告
3.用T-SQL语句创建存储过程:要求返回指定课程的平均成绩,其中指定课程号以存储过程的输入参数进行传递。代码及结果如下:
图三、返回指定课程的平均成绩成功
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数据库中:
代码及结果如下:

实验六存储过程和触发器

实验六存储过程和触发器

实验六存储过程和触发器142208100149 陈聪1、目的与要求(1)掌握存储过程的使用方法。

(2)掌握触发器的使用方法。

2、实验准备(1)了解存储过程的使用方法。

(2)了解触发器的使用过程。

(3)了解inserted逻辑表和deleted逻辑表的使用。

(4)了解如何编写CRL存储过程与触发器。

3、实验内容。

(1)存储过程。

①创建存储过程,使用Employees表中的员工人数来初始化一个局部变量,并调用这个存储过程。

注:此段T-SQL命令,书上变量名书写错误,漏掉了下划线。

(@nu_MBER1和@nu MBER1区别)执行该存储过程,并查看结果。

②创建存储过程,比较两个员工的实际收入,若前者比后者高就输出0,否则输出1.执行该存储过程并查改结果。

③创建添加职员记录的存储过程EmployeeAdd。

执行该存储过程。

执行上面T-SQL命令,在结果栏中显示一行受影响,说明结果已经插入成功,在表Employees中也够看到结果已经存在。

④创建存储过程,使用游标确定一个员工的实际收入是否排在前3名。

结果为1表示是,结果为0表示否。

执行该存储过程,在结果栏中显示,命令已成功完成,并且在左侧对象资源管理器中进行刷新会显示刚刚创建的存储过程。

执行该存储过程:上面T-SQL结果中输出“1”,代表着员工“108991”的实际收入排在前三名。

【思考与练习】A、创建存储过程,要求当一个员工的工作年份大于6年时,将其转到经理办公室工作。

创建这个存储过程时候,在存储过程的条件判断中我添加了一项,判断工作年份在6年以上的员工是否在经理办公室,只有不在经理办公室的时候才进行调整,这样更符合实际问题些。

然后执行上面的存储过程,并且查看结果:此时有可能会出现(我就出现了)这样的问题,在之前实验三中就出现了。

解决方法同样是解除规则的绑定。

查看表Employees中员工“000001”的DepartmentID已经修改为“3”(经理办公室)。

大型数据库 实验6 存储过程

大型数据库 实验6 存储过程

一.实验内容1)创建并执行不带参数的存储过程①针对项目表创建名为“P1_存储过程”的存储过程,要求显示所有记录。

②执行“P1_存储过程”存储过程进行数据浏览。

2)创建并执行带输入参数的存储过程①部门人数应该等于员工表中对应部门实际员工数,由于有员工调入调出,可能存在不等的情况。

编写存储过程“P2_存储过程”,检查指定部门人数的正确性,如果不正确,则进行修改。

②显示部门表和员工表数据;然后执行存储过程;再显示部门表和员工表数据,比较数据是否变化。

3)创建带OUTPUT输出参数的存储过程①设计存储过程“P3_存储过程”,从员工表计算某部门人员平均工资。

要求输入参数为部门号,输出参数是该部门的平均工资。

②编写主程序,调用存储过程,在主程序中显示指定部门的平均工资。

4)创建并执行带输入参数和返回状态的存储过程①设计存储过程“P4_存储过程”,完成对员工表的元组插入工作。

要求使用输入参数。

插入操作成功返出状态值0,失败返出状态值-1。

②执行存储过程,如果返回状态值为0,输出“数据插入成功”,否则输出“数据插入失败”。

5)修改和删除存储过程①修改“P1_存储过程”存储过程,要求指定项目编号作为输入参数,并增加WITH ENCRYPTION 选项。

②查看修改后的“P1_存储过程”存储过程文本。

③执行“P1_存储过程”存储过程④删除“P1_存储过程”存储过程。

二.测试数据与实验结果1、创建并执行不带参数的存储过程a、针对项目表创建名为“P1_存储过程”的存储过程,显示所有记录,代码如下:create procedure P1_存储过程asselect*from项目表b、执行“P1_存储过程”存储过程进行数据浏览,结果如下:2、创建并执行带输入参数的存储过程a、编写存储过程“P2_存储过程”,其中利用游标逐行检查部门人数是否和在员工表中的数据相符合,如果不符合,则利用游标进行定位修改,代码如下:create procedure P2_存储过程asdeclare@部门号char(6),@部门人数intdeclare@n intdeclare部门表_cursor cursor forselect部门号,部门人数from部门表for update of部门人数open部门表_cursorfetch next from部门表_cursor into@部门号,@部门人数while@@FETCH_STATUS=0beginselect@部门号,@部门人数select@n=COUNT(员工号)from员工表where所在部门号=@部门号update部门表set部门人数=@nwhere current of部门表_cursorfetch next from部门表_cursor into@部门号,@部门人数endclose部门表_cursordeallocate部门表_cursor执行存储过程,代码如下:exec P2_存储过程b、显示部门表和员工表数据,然后执行存储过程,可以看出,在执行存储过程之前,“办公室”的人数和员工表中的人数是不相符的,在执行存储过程之后,部门人数成功更新,如下图所示:图1 员工表中的数据图2执行“P2_存储过程”之前的部门表数据图3 执行“P2_存储过程”之后的部门表数据3、创建带OUTPUT输出参数的存储过程a、设计存储过程“P3_存储过程”,从员工表计算某部门人员平均工资,输入参数为部门号,输出参数是该部门的平均工资,创建的过程如下:create procedure P3_存储过程(@部门号char(10),@部门平均工资float output)asselect@部门平均工资=AVG(工资)from员工表where所在部门号=@部门号c、执行的代码和运行结果如下:declare@部门平均工资floatexec P3_存储过程'1011',@部门平均工资outputselect'部门平均工资'=@部门平均工资4、创建并执行带输入参数和返回状态的存储过程a、设计存储过程“P4_存储过程”,完成对员工表的元组插入工作,存储过程的创建代码如下:create procedure P4_存储过程(@员工号char(4),@姓名varchar(20),@性别char(2),@出生年月varchar(60),@技术职称char(10),@工资int,@所在部门号char(6),@参加的项目总数int)asbegin transactioninsert into员工表values(@员工号,@姓名,@性别,cast(@出生年月as datetime),@技术职称,@工资,@所在部门号,@参加的项目总数)if@@error<>0beginrollback transactionreturn-1endelsebegincommit transactionreturn 0endb、执行存储过程,代码如下:此存储过程的返回值是-1或者0,所以可以将返回值赋给变量@statusdeclare@status intexec@status=P4_存储过程'2015','钱六','男','1988-03-15','工程师',2700,'10101','1'if@status=0print'插入成功'elseprint'插入失败'c、执行结果如下:图1 显示插入成功图2 在“员工表”中查看5、修改和删除存储过程a、修改“P1_存储过程”存储过程,要求指定项目编号作为输入参数,并增加WITH ENCRYPTION:alter procedure P1_存储过程(@项目编号char(5))with encryptionasselect*from项目表b、执行存储过程如下:exec P1_存储过程'J1111'c、查看存储过程如下:d、删除存储过程成功,如下图:drop proc P1_存储过程三.实验总结本实验使我学会了在SQL Server 2008中创建存储过程和执行存储过程,现在还不熟悉,希望以后可以通过练习掌握的更好。

存储过程实验报告_总结(3篇)

存储过程实验报告_总结(3篇)

第1篇一、实验背景随着数据库技术的不断发展,存储过程在数据库管理中的应用越来越广泛。

存储过程是一组为了完成特定功能的SQL语句集合,它具有提高数据库性能、增强安全性、简化应用开发等优点。

为了更好地掌握存储过程的应用,我们进行了本次实验。

二、实验目的1. 理解存储过程的概念、特点和应用场景。

2. 掌握存储过程的创建、执行、修改和删除方法。

3. 学习使用存储过程实现常见的数据库操作,如数据插入、查询、更新和删除。

4. 熟悉存储过程中的流程控制语句、循环语句和游标操作。

三、实验环境1. 操作系统:Windows 102. 数据库:MySQL 5.73. 开发工具:MySQL Workbench四、实验内容1. 创建存储过程2. 执行存储过程3. 修改存储过程4. 删除存储过程5. 存储过程中的流程控制语句6. 存储过程中的循环语句7. 存储过程中的游标操作五、实验步骤1. 创建存储过程首先,我们创建一个简单的存储过程,用于查询特定部门的所有员工信息。

```sqlCREATE PROCEDURE GetEmployeeInfo(IN dept_id INT)BEGINSELECT FROM employees WHERE department_id = dept_id;END;```在此过程中,我们使用了`IN`参数,表示该参数在调用存储过程时传入。

2. 执行存储过程创建存储过程后,我们可以通过以下命令执行它:```sqlCALL GetEmployeeInfo(10);```这将查询部门ID为10的所有员工信息。

3. 修改存储过程如果需要修改存储过程,可以使用`ALTER PROCEDURE`语句。

例如,将查询条件修改为按姓名查询:```sqlALTER PROCEDURE GetEmployeeInfo(IN emp_name VARCHAR(50))BEGINSELECT FROM employees WHERE name = emp_name;END;```4. 删除存储过程删除存储过程可以使用`DROP PROCEDURE`语句。

数据库实验六_使用PLSQL编写存储过程访问数据库

数据库实验六_使用PLSQL编写存储过程访问数据库

数据库原理实验报告
实验名称
使用PL/SQL编写存储过程访问数据库
实验环境
硬件平台:Intel Core i5-3210M
操作系统:Windows 8.1
数据库管理系统(DBMS):MySQL Server 5.5
实验内容及步骤
1.由于我们实验所用的MySQL不支持PL/SQL,但提供了存储过程的功能。

因此我们通过
在MySQL中建立存储过程来完成本实验。

2.建立一个存储过程,用来向student表添加一条学生记录,如图:
在存储过程中,我们将学号,姓名,性别,年龄以及系别作为存储过程的输入参数。

3.在调用存储过程前,我们先查看一下student表:
4.下面,我们调用存储过程,向表中插入一条数据,如下:
5.调用完成后,我们再次查看student表中的内容:
可以看到,刚才调用存储过程向student表中插入的数据已在表中,说明插入成功。

数据库存储过程实训报告

数据库存储过程实训报告

一、实训背景随着信息技术的飞速发展,数据库技术在各行各业中得到了广泛应用。

为了提高数据库操作的效率,降低数据库开发难度,存储过程作为一种数据库编程技术,受到了广泛关注。

本次实训旨在让学生掌握数据库存储过程的基本概念、设计方法、实现过程和调试技巧,提高数据库应用能力。

二、实训目的1. 理解数据库存储过程的基本概念和作用;2. 掌握存储过程的设计、编写和调试方法;3. 熟悉存储过程中的参数传递、流程控制、异常处理等技术;4. 提高数据库应用能力,为以后从事数据库开发工作打下基础。

三、实训内容1. 存储过程的基本概念存储过程是一组为了完成特定任务而预先编译并存储在数据库中的 SQL 语句集合。

它可以接受输入参数,执行一系列操作,并将结果返回给调用者。

存储过程可以提高数据库操作的效率,简化编程工作,增强数据库的安全性。

2. 存储过程的类型根据存储过程中的 SQL 语句类型,存储过程可以分为以下几种:(1)系统存储过程:由数据库管理系统提供,用于完成特定的数据库管理任务。

(2)用户自定义存储过程:由用户根据实际需求编写,用于完成特定的业务逻辑。

3. 存储过程的语法格式(1)创建存储过程```sqlDELIMITER //CREATE PROCEDURE 存储过程名([参数列表])BEGIN-- SQL 语句END //DELIMITER ;```(2)调用存储过程```sqlCALL 存储过程名([参数列表]);```(3)查看存储过程```sqlSHOW PROCEDURE STATUS LIKE '存储过程名%';```(4)删除存储过程```sqlDROP PROCEDURE 存储过程名;```4. 存储过程的应用实例以下是一个简单的存储过程实例,用于计算两个数的和:```sqlDELIMITER //CREATE PROCEDURE SumTwoNumbers(IN a INT, IN b INT, OUT result INT) BEGINSET result = a + b;END //DELIMITER ;```调用该存储过程:```sqlCALL SumTwoNumbers(10, 20, @result);SELECT @result; -- 输出结果:30```5. 存储过程中的参数传递存储过程中的参数分为输入参数、输出参数和输入输出参数:(1)输入参数(IN):在调用存储过程时传递给存储过程的参数,存储过程内部可以修改。

存储过程的实验报告

存储过程的实验报告

一、实验目的1. 理解存储过程的概念和作用。

2. 掌握存储过程的创建、调用和修改方法。

3. 学会使用存储过程进行数据查询、插入、更新和删除等操作。

4. 熟悉存储过程中的流程控制语句和常用函数。

二、实验环境1. 操作系统:Windows 102. 数据库:MySQL 5.73. 实验工具:MySQL Workbench三、实验内容1. 创建一个名为“dept”的表,包含以下字段:deptno(部门编号)、dname(部门名称)、loc(部门位置)。

```sqlCREATE TABLE dept (deptno INT PRIMARY KEY,dname VARCHAR(50),loc VARCHAR(50));```2. 创建一个名为“emp”的表,包含以下字段:empno(员工编号)、ename(员工姓名)、job(职位)、mgr(上级编号)、hiredate(入职日期)、sal(工资)、comm(佣金)、deptno(部门编号)。

```sqlCREATE TABLE emp (empno INT PRIMARY KEY,ename VARCHAR(50),job VARCHAR(50),mgr INT,hiredate DATE,sal DECIMAL(10, 2),comm DECIMAL(10, 2),deptno INT,FOREIGN KEY (deptno) REFERENCES dept(deptno));```3. 创建一个名为“dept_info”的存储过程,用于查询部门信息和员工信息。

```sqlCREATE PROCEDURE dept_info(IN deptno_input INT)BEGINSELECT d.dname, e.ename, e.job, e.hiredateFROM dept dJOIN emp e ON d.deptno = e.deptnoWHERE d.deptno = deptno_input;END;```4. 创建一个名为“add_dept”的存储过程,用于向“dept”表中插入一条新部门信息。

存储过程实验报告

存储过程实验报告

一、实验目的1. 了解存储过程的概念、作用和优势。

2. 掌握存储过程的创建、修改、删除和调用方法。

3. 学会使用存储过程实现复杂的数据操作和业务逻辑。

4. 熟悉存储过程的性能优化和安全性考虑。

二、实验环境1. 操作系统:Windows 102. 数据库管理系统:MySQL 8.03. 开发工具:MySQL Workbench三、实验内容1. 创建存储过程2. 调用存储过程3. 修改和删除存储过程4. 存储过程的嵌套和递归5. 存储过程的性能优化6. 存储过程的安全性考虑四、实验步骤1. 创建数据库和表```sqlCREATE DATABASE experiment_db;USE experiment_db;CREATE TABLE students (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50),age INT,gender ENUM('male', 'female'));CREATE TABLE courses (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50),credit INT);```2. 创建存储过程```sql-- 创建一个存储过程,用于查询学生姓名和年龄DELIMITER //CREATE PROCEDURE GetStudentInfo(IN student_id INT) BEGINSELECT name, age FROM students WHERE id = student_id; END //DELIMITER ;```3. 调用存储过程```sqlCALL GetStudentInfo(1);```4. 修改存储过程```sql-- 修改存储过程,增加查询性别DELIMITER //CREATE PROCEDURE GetStudentInfo(IN student_id INT)BEGINSELECT name, age, gender FROM students WHERE id = student_id; END //DELIMITER ;```5. 删除存储过程```sqlDROP PROCEDURE IF EXISTS GetStudentInfo;```6. 存储过程的嵌套和递归```sql-- 创建一个递归存储过程,用于计算阶乘DELIMITER //CREATE PROCEDURE Factorial(IN n INT, OUT result INT)BEGINIF n = 1 THENSET result = 1;ELSESET @result = n;CALL Factorial(n - 1, @result);SET result = n @result;END IF;END //DELIMITER ;```7. 存储过程的性能优化- 使用合适的索引- 减少不必要的数据访问- 优化SQL语句8. 存储过程的安全性考虑- 使用参数化查询,防止SQL注入攻击- 限制存储过程的权限- 使用加密技术保护敏感数据五、实验结果与分析1. 创建存储过程:成功创建了GetStudentInfo存储过程,并能够查询到指定学生的姓名和年龄。

[计算机]数据库实验报告六

[计算机]数据库实验报告六

____专业__日期:实验六:存储过程与触发器的应用一、实验目的1、掌握创建存储过程的方法和步骤。

2.掌握存储过程的使用方法。

3.掌握创建触发器的方法和步骤。

4.掌握触发器的使用方法。

二、实验内容1、存储过程的创建、执行和删除;2、触发器的创建、执行和删除。

三、实验步骤1、存储过程的创建、执行和删除。

(1)使用S_C数据库中的student表、course表;sc表创建一个带参数的存储过程—cjjicx。

该存储过程的作用是:当任意输入一个学生的XX时,将从三个表中返回该学生的学号、选修的课程名称和课程成绩。

Cjjicx的创建语句:createprocedure[dbo].[cjjicx]@sname nchar(10)asselect s.sno,ame,sc.gradefrom student as s innerjoin sc as sc on s.sno=sc.sno innerjoin course as c on o= owhere sname=@sname(2)执行cjjicx存储过程,查询“XXX”(自己选个名字)的学号、选修课程和课程成绩。

执行语句:结果描述:(3)使用系统存储过程sp_helptext查看存储过程cjjicx的文本信息。

查看结果描述:(4)使用S_C数据库中的student表,为其创建一个存储过程—jmxs。

该存储过程的作用是:当执行该存储过程时,将返回物流工程系学生的所有信息。

Jmxs创建语句:(5)执行jmxs存储过程,查看物流工程系学生的情况。

执行语句:结果描述:(6)删除jmxs存储过程。

删除语句:2、触发器的创建、执行和删除。

(1)在S_C数据库中建立一个名为insert_xh的INSERT触发器,存储在sc表中。

该触发器的作用是:当用户向sc表中插入记录时,如果插入了在student表中没有的学生学号sno,则提示用户不能插入记录,否则提示记录插入成功。

数据库实验六存储过程

数据库实验六存储过程

实验六存储过程一、实验目的(1)掌握T-SQL流控制语句。

(2)掌握创建存储过程的方法。

(3)掌握存储过程的执行方法。

(4)掌握存储过程的管理和维护。

二、实验内容1、创建简单存储过程(1)创建一个名为stu_pr的存储过程,该存储过程能查询出051班学生的所有资料,包括学生的基本信息、学生的选课信息(含未选课同学的信息)。

要求在创建存储过程前请判断该存储过程是否已创建,若已创建则先删除,并给出“已删除!”信息,否则就给出“不存在,可创建!”的信息。

if exists(select name from sysobjects where name='stu_pr'and type='p') beginprint'已删除!'drop procedure stu_prendelseprint'不存在,可创建!'gocreate procedure stu_prasselect*from Student_20103322left outer join SC_20103322on (Student_20103322.Sno=SC_20103322.Sno)left outer joinCourse_20103322on (Course_o=SC_o) where classno='051'exec stu_pr2、创建带参数的存储过程(1)创建一个名为stu_proc1的存储过程,查询某系、某姓名的学生的学号、姓名、年龄,选修课程名、成绩。

系名和姓名在调用该存储过程时输入,其默认值分别为“%”与“林%”。

执行该存储过程,用多种参数加以测试。

if exists(select name from sysobjects where name='stu_proc1'andtype='p')beginprint'已删除!'drop procedure stu_proc1endelseprint'不存在,可创建!'gocreate procedure stu_proc1@Sdept char(8)='%',@Sname varchar(8)='林%'asselectSdept,Student_20103322.Sno,Sname,DATEDIFF(YEAR,Birth,GETDATE())age,Cn ame,Gradefrom Student_20103322,SC_20103322,Course_20103322where Student_20103322.Sno=SC_20103322.Snoand Course_o=SC_oand Sdept like@Sdeptand Sname like@Snameexecute stu_proc1'计算机系','林红'execute stu_proc1'信息安全','胡光璟'(2)创建一个名为Student_sc的存储过程,可查询出某段学号的同学的学号、姓名、总成绩。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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源代码。

相关文档
最新文档