实验8 存储过程
实验类型: 验证型 实验课时: 4 指导教师: 鲁 琴
时 间:2011年 月 日 课 次:第 节 教学周次:第 周
实验分室: 实验台号: 实 验 员:
实验目的:
1. 掌握存储过程的创建和调用方法
2. 掌握MySQL的流程控制语句
3. 掌握MySQL游标的使用
4.掌握存储函数的创建和调用方法
5.掌握触发器的创建和使用
6.掌握事件的创建和使用
实验要求:
掌握存储过程、存储函数、触发器和事件的相关知识
实验内容:
1. 存储过程
2. 存储函数
3. 触发器
4. 事件
实验步骤:
说明:delete in按实验步骤对数据库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 $$
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的值的命令及结果进行屏幕截图。
(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;
思考题:
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;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论