实验7-存储过程应用初步
- 格式:doc
- 大小:132.00 KB
- 文档页数:16
实验七存储过程及应用1.实验目的1、理解存储过程的概念。
2、掌握存储过程的使用方法。
2.实验要求1.建立如下的存储过程(基于前面实验建立的表和插入的数据,并为每个存储过程设计返回的状态值):(1)按要求设计完成如下功能的存储过程。
①查询平均分数在x到y范围内的学生信息。
说明:该存储过程有两个参数;要求查询的学生信息包括学号、姓名、院系名称和平均分数。
②更新操作,以学号、课程编号和考试成绩作参数更新指定学生和课程的考试成绩,并返回该学生的平均成绩。
(2)自行再分别设计一个完成查询和完成操作功能的存储过程(在实验报告中要准确描述功能需求)。
(3)在客户端以存储过程和输入SQL语句的方式分别执行相同的查询或操作,比较使用和不使用存储过程的区别。
3、实验过程(1)①查询平均分数在x到y范围内的学生信息create procedure cc711@x smallint,@y smallintasselect学生.学号,学生.姓名,院系.名称,学生.平均成绩from学生join院系on学生.院系=院系.编号where学生.平均成绩between@x and@yEXECUTE cc71160,90②更新操作,以学号、课程编号和考试成绩作参数更新指定学生和课程的考试成绩,并返回该学生的平均成绩create procedure mcc712@xh nchar(8),@kcbh nchar(8),@cj intasupdate选课set成绩=@cj where学号=@xh and课程编号=@kcbhdeclare@pjcj intselect@pjcj=AVG(成绩)from选课where学号=@xhreturn@pjcjdeclare@avg intexecute@avg=mcc7122,5,98print'更新后平均成绩:'+str(@avg,6)(2)自行再分别设计一个完成查询和完成操作功能的存储过程(在实验报告中要准确描述功能需求)。
一、实验背景随着数据库技术的不断发展,数据库管理系统(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”存储过程更新用户信息。
《数据库原理与应用》课程实验报告
学院:物光学院班级:07网工姓名:学号:
实验设备:计算机1台实验日期:年月日
实验项目名称存储过程
实验目的 1.掌握创建和使用存储过程。
2.掌握显示存储过程。
3.掌握删除存储过程。
实验要求:
1.熟悉查询分析器的操作,以及执行T-SQL语句的方法。
2.了解使用存储过程的优点。
实验内容(包括步骤):
1.创建一个为worker表添加职工记录的存储过程Addworker。
2.创建一个存储过程Delworker删除worker表中指定职工号的记录。
3.显示存储过程delworker。
4.删除存储过程addworker和delworker。
调试与结果测试:
代码注释:
无
――――――――――――以下内容为教师填写―――――――――――――――
教师评阅:
成绩:
年月日。
实验七使用PL/SQL编写存储过程访问数据库一、实验目的1、熟悉存储过程编译过程、工作原理及其优点;2、熟悉使用存储过程来进行数据库应用程序的设计。
二、实验条件1、具有局域网的计算机机房一个;2、SQL SERVER2000或SQL SERVER2005软件。
三、实验内容对教材“学生-课程”数据库(student表,course表,sc表),编写存储过程,分别完成下面功能:create table Student(Sname char(12)primary key,Ssex char(2),Sage int,Sdept char(12));create table Course(Cname char(12)primary key,Cpno int,Ccredit int);create table SC(Cno char(12)primary key,Grade int);①建立存储过程完成统计“离散数学”的成绩分布情况,即按照各分数段统计人数;create procedure Proc_1asselect count(*),Cname,Grade from sc wherecname in(select Cname from Course where cname='db');exec Proc_1;②建立存储过程完成统计任意一门课的平均成绩;create procedure Proc_2asselect avg(grade),cname from sc where camme='db'exec Proc_2;③建立存储过程完成将学生选课成绩从百分制改为等级制(即A、B、C、D、E);create or replace procedure change_critical()as declarechgrade char(1);currecord record;beginalter table SC add column(newgrade char(1));for currecord in select*from SC loopif currecord.grade<60then chgrade='E';else if currecord.grade<70then chgrade='D';else if currecord.grade<80then chgrade='C';else if currecord.grade<90then chgrade='B';else chgrade='A';end if;update SC set newgrade=chgradewhere sno=currecord.sno and cno=o;end loop;alter table SC drop column grade;alter table SC rename newgrade to grade;end;④建立存储过程完成对学生表的批量插入数据,插入数据的条数作为其中一个参数,另一个参数为学号起始学号,其它数据格式自行定义(如每次插入100条数据);create procedure proc_4@count int,@startsno char(9)asdeclare@loop intset@loop=0while@loop<@countbegininsert into student(sno,sname,ssex,sage,sdept)values(@startsno,'zj','M',20,'IS')set@loop=@loop+1set@startsno=@startsno+1endexec proc_4100,'20130901';要求:提交源程序并标识必要的注释。
一、实验模块数据库原理与应用二、实验标题存储过程操作实验三、实验内容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)成功创建存储过程和触发器。
实验7 存储过程的使用目的与要求(1)掌握存储过程的使用方法实验准备(1)了解存储过程的使用方法实验内容1.创建存储过程在查询分析器编辑窗口输入各存储过程的代码并执行以下程序。
(1)添加职员记录的存储过程EmployeeAddUSE YGGLGOCREATE PROCEDURE EmployeeAdd (@employeeid char(6),@name char(10),@birthday datetime,@sex bit,@address char(20),@zip char(6),@phonenumber char(12),@emailaddress char(20),@departmentID char(3))ASBEGININSERT INTO EmployeesV ALUES (@employeeid,@name,@birthday,@sex,@address,@zip,@phonenumber,@departmentID)ENDRETURNGO(2) 修改职员记录的存储过程EmployeeUpdate:USE YGGLGOCREATE PROCEDURE EmployeeUpdate(@empid char(6),@employeeid char(6),@name char(10),@birthday datetime,@sex bit,@address char(20),@zip char(6),@phonenumber char(12),@emailaddress char(20),@departmentID char(3))ASBEGINUPDATE EmployeesSETEmployeeid=@employeeid,Name=@name,Birthday=@birthday,Sex=@sex,Address=@addre ss,Zip=@zip,Phonenumber=@phonenumber,Emailaddress=@emailaddress,DepartmentID=@ departmentIDWHERE Employeeid=@empidENDRETURNGO(3)删除职员记录的存储过程EmployeeDelete:USE YGGLGOCREATE PROCEDURE EmployeeDelete(@employeeid char(6))ASBEGINDELETE FROM EmployeesWHERE Employeeid=@employeeidENDRETURNGO2.调用存储过程USE YGGLEXEC EmployeeAdd ‘990230’,’刘朝’,’890909’,1,’武汉小洪山5号’,’’,’’,’’,’3’GOUSE YGGLEXEC Employeeupdate ‘990230’,’990230’,’刘平’,’890909’,1,’武汉小洪山5号’,’’,’’,’’,’2’GOUSE YGGLEXEC EmployeeDelete ‘990232’思考与练习:编写对YGGL各表进行插入、修改、删除操作的存储过程,然后编写一段程序调用这些存储过程。
一、实验目的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篇一、实验背景随着数据库技术的不断发展,存储过程在数据库管理中的应用越来越广泛。
存储过程是一组为了完成特定功能的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`语句。
实验7-存储过程应用初步
《数据库原理及应用》课程实验报告
AND种类名称='文学') /*T-SQL语句*/
GO
II、执行过程一:
EXECUTE GUOCHENG_ONE /*执行该存储过程功能*/
(或者:EXEC GUOCHENG_ONE )
(2)(单个参数)查询:设置一个存储过程GUOCHENG_TWO,通过指定可变的读者姓名,显示其所借阅的图书的图书名:
I、先以一个“具体的姓名”书写T-SQL语句,
FROM READERS
WHERE姓名=@NAME ))
GO
/*过程功能*/
II、执行上述过程,即随意指定读者姓名,查询其借阅图书的图书名:
EXECUTE GUOCHENG_TWO @NAME='李明'/*执行该存储过程功能*/
EXECUTE GUOCHENG_TWO @NAME='李明'/*执行该存储过程功能*/
(3)设置(多个参数)插入一条记录的过程;完成后并执行该过程将:“读者编号:1243;姓名:翟萌;种类编号:2;工作单位:西安交通大学;住址:桃苑小区3-415;联系电话:83839228;登记日期:2014-04-15;性别:男”这些内容添加到到表READERS中:
I、创建向表READER插入记录的过程如下:CREATE PROCEDURE GUOCHENG_THREE
@READERS_NUMBER nchar(10),@NAME varchar(20),@RANGE_NUMBER
int,@COMPANY varchar(50),
@ADD varchar(100),@TEL varchar(20),@DATE datetime,@SEX char(2)
AS
2.
(1)创建带输出参数的存储过程,要求求出零件表P中所有蓝色零件重量的平均值,并将结果通过输出变量返回给用户:
I、创建具有上述功能的带输出参数的存储过程:CREATE PROCEDURE GUOCHENG_FOUR @PJZ INT OUTPUT
AS
/*创建过程四*/
SELECT @PJZ=A VG(WEIGHT)
FROM零件表P
WHERE COLOR ='蓝'/*过程功能*/
GO
II、执行该过程:
DECLARE @PJZ INT
EXECUTE GUOCHENG_FOUR @PJZ OUTPUT PRINT'零件表中所有蓝色零件的平均重量为'+STR(@PJZ)
GO
(2)创建带输入输出参数的存储过程,要求求出“用户指定的供应商”提供给“用户指定的工程”的”所有零件重量”的平均值,并将结果通过输出变量返回给用户:
I、创建具有上述功能的带输入输出参数的存储过程:
CREATE PROCEDURE GUOCHENG_FIVE @GYSN NCHAR(10),
@GCN NCHAR(10),@PJZ INT OUTPUT
AS/*创建过程四*/
SELECT @PJZ=AVG(WEIGHT)
FROM零件表P
WHERE PN IN(SELECT PN
FROM供应关系表SPJ
WHERE SN IN(SELECT SN
FROM供应关系表SPJ
WHERE SN=@GYSN)
AND JN IN(SELECT JN
FROM供应关系表SPJ
WHERE JN=@GCN))/*过程功能*/
GO
II、假设用户指定供应商为S4,工程为J4,执行上述过程:
DECLARE @PJZ INT
EXECUTE GUOCHENG_FIVE 'S5','J4',@PJZ OUTPUT
PRINT'零件的平均值为'+STR(@PJZ)
GO
(3)(无参数)更新“供应商表”用户指定值的供应表信息:
I、创建具有上述功能的存储过程:
CREATE PROCEDURE GUOCHENG_SIX @GYSN NCHAR(10),
@GYSNAME NCHAR(10),@CSM V ARCHAR(50) AS
/*创建过程六*/
UPDATE供应商表S
SET SNAME=@GYSNAME,CITY=@CSM WHERE SN=@GYSN /*过程功能*/
GO
II、指定S4,修改名称为“SN8”,城市为“土耳其”:
附:之前实验报告修改
实验五
1.
1)查询“计算机科学”这类图书中的定价最高的图书书名和定价;
SELECT图书名,价格AS定价
FROM Books,BookCategory
WHERE价格=(SELECT MAX(价格)
FROM Books
WHERE Books.种类编号=BookCategory.种类编号
AND种类名称='计算机科学')
实验六
3.导入“图书借阅”5张表的关系图;导入供应商等四张表的关系图。
I、首先处理“此数据库没有有效的所有者,因
此无法安装数据库关系图支持对象”问题:
use [实验二]
EXEC sp_changedbowner'sa'
II、导入“图书借阅”5张表的关系图:
III、导入“供应商关系”4张表的关系图:
注:空间不够,可以增加页码。