实验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小时内删除。