网络数据库技术课程实验8anN1

来源:网络收集 时间:2025-06-25 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xuecool-com或QQ:370150219 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

实验8 存储过程

实验类型: 验证型 实验课时: 4 指导教师: 鲁 琴 时 间:2011年 月 日 课 次:第 节 教学周次:第 周 实验分室: 实验台号: 实 验 员:

实验目的:

1. 掌握存储过程的创建和调用方法 2. 掌握MySQL的流程控制语句 3. 掌握MySQL游标的使用 4.掌握存储函数的创建和调用方法 5.掌握触发器的创建和使用 6.掌握事件的创建和使用

实验要求:

掌握存储过程、存储函数、触发器和事件的相关知识

实验内容:

1. 存储过程 2. 存储函数 3. 触发器 4. 事件

实验步骤:

说明:按实验步骤对数据库YGGL中的三个表进行操作,三个表结构如下(具体参看实验2): Departments (DepartmentID,DepartmentName,Note) Employees

(EmployeeID,Name,Sex,Birthday,Education,WorkYear,Address,PhoneNumber,DepartmentID) Salary(EmployeeID,InCome,OutCome)

要求:将实验步骤中紫色底纹部分填上正确答案。 1. 存储过程

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

USE YGGL DELIMITER $$

1

CREATE PROCEDURE TEST(OUT NUMBER1 INT ) BEGIN

DECLARE NUMBER2 INT;

SET NUMBER2=(SELECT COUNT(*) FROM Employees); SET NUMBER1=NUMBER2; END$$ DELIMITER ;

调用该存储过程

CALL TEST(@NUMBER);

查看@NUMBER的值。

SELECT @NUMBER ;

将调用存储过程及查看@NUMBER的值的命令及结果进行屏幕截图。

(2) 创建存储过程,比较两个员工的实际收入,若前者比后者高就输出0,否则输出1。

DELIMITER $$

CREATE PROCEDURE COMP(IN ID1 CHAR(6),IN ID2 CHAR(6),OUT BJ INT ) BEGIN

DECLARE SR1,SR2 FLOAT;

SELECT InCome-OutCome INTO SR1 FROM Salary

WHERE EmployeeID=ID1;

SELECT InCome-OutCome INTO SR2 FROM Salary WHERE EmployeeID=ID2; IF SR1>SR2 THEN SET BJ=0; ELSE SET BJ=1; END IF; END$$ DELIMITER ;

调用该存储过程

CALL COMP('000001','108991',@BJ1);

查看@BJ1的值。

SELECT @BJ1 ;

将调用存储过程及查看@BJ1的值的命令及结果进行屏幕截图。

2

(3) 创建存储过程,使用游标确定一个员工的实际收入是否排在前三名。结果为TRUE表示是,结果为FALSE表示否。

DELIMITER $$

CREATE PROCEDURE TOP3(IN EM_ID CHAR(6),OUT OK BOOLEAN ) BEGIN

DECLARE X_EM_ID CHAR(6); DECLARE SEQ INT; DECLARE ACT_IN FLOAT; DECLARE FOUND BOOLEAN;

DECLARE SALARY_DIS CURSOR FOR SELECT EmployeeID, InCome-OutCome

FROM Salary ORDER BY 2 DESC;

DECLARE CONTINUE HANDLER FOR NOT FOUND

SET FOUND=FALSE;

SET SEQ=0; SET FOUND=TRUE; SET OK=FALSE; OPEN SALARY_DIS;

FETCH SALARY_DIS INTO X_EM_ID,ACT_IN; WHILE FOUND AND SEQ<3 AND OK=FALSE DO SET SEQ=SEQ+1;

IF X_EM_ID=EM_ID THEN SET OK=TRUE; END IF;

FETCH SALARY_DIS INTO X_EM_ID,ACT_IN; END WHILE;

CLOSE SALARY_DIS; END$$ DELIMITER ;

调用该存储过程并查看结果,进行屏幕截图

CALL TOP3('010018',@OUT1); SELECT @OUT1;

3

思考题:

1. 创建存储过程,要求当一个员工的工作年份大于6年时将其转到经理办公室工作。

CREATE PROCEDURE t1() BEGIN

DECLARE DID CHAR(3);

SELECT DEPARTMENTID INTO DID FROM DEPARTMENTS WHERE DEPARTMENTNAME='经理办公室'; UPDATE EMPLOYEES SET DEPARTMENTID=DID WHERE WORKYEAR>6; END

2. 创建存储过程,使用游标计算本科及以上学历的员工在总员工数中所占的比例。

DELIMITER $$

CREATE PROCEDURE t2(OUT RATIO float ) BEGIN

DECLARE NUM1,NUMTOTAL INT; DECLARE EDU1 CHAR(4);

DECLARE FOUND BOOLEAN DEFAULT TRUE; DECLARE comp CURSOR FOR SELECT Education FROM Employees;

DECLARE CONTINUE HANDLER FOR NOT FOUND

SET FOUND=FALSE;

SET NUM1=0; SET NUMTOTAL=0; OPEN COMP;

4

FETCH COMP INTO EDU1; WHILE FOUND DO

SET NUMTOTAL=NUMTOTAL+1; IF EDU1='本科' or EDU1='硕士' THEN SET NUM1=NUM1+1; END IF;

FETCH COMP INTO EDU1; END WHILE; CLOSE COMP;

SET RATIO=NUM1/NUMTOTAL; END$$ DELIMITER ;

2.存储函数

(1)创建一个存储函数,返回员工的总人数。

CREATE FUNCTION EM_NUM( )

RETURNS INT

RETURN(SELECT COUNT(*) FROM Employees);

调用该存储函数:

SELECT EM_NUM();

(2)创建一个存储函数,检验一个员工号是否在Salary表中有但在Employees表中不存在,若是则删除Salary表中该员工并返回TRUE,否则返回FALSE。

DELIMITER $$

CREATE FUNCTION DELETE_EM(EM_ID CHAR(6) )

RETURNS BOOLEAN BEGIN

DECLARE NUM1,NUM2 INT;

SELECT COUNT(*) INTO NUM1 FROM Salary WHERE EmployeeID=EM_ID;

5

百度搜索“70edu”或“70教育网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,70教育网,提供经典综合文库网络数据库技术课程实验8anN1在线全文阅读。

网络数据库技术课程实验8anN1.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.70edu.com/wenku/614940.html(转载请注明文章来源)
Copyright © 2020-2025 70教育网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:370150219 邮箱:370150219@qq.com
苏ICP备16052595号-17
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:7 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219