一、目的与要求
(1)掌握存储过程创建和调用的方法;
(2)掌握MySQL中程序片段的组成;
(3)掌握游标的使用方法;
(4)掌握存储函数创建和调用的方法;
(5)掌握触发器的使用方法;
(6)掌握事件的创建和使用方法;
二、实验内容
(1)了解存储过程体中允许的SQL语句类型和参数的定义方法;
(2)了解存储过程的调用方法;
(3)了解存储函数的定义和调用方法;
(4)了解触发器的作用和调用方法;
(5)了解事件的作用和定义方法;
三、实验结果
1.存储过程
(1)创建存储过程,使用Employees表中的员工人数来初始化一个局部变量,并调用这个存储过程。
USE YGGL
DELIMITER $$
CREATE PROCEDURE TEST(OUT NUMBER1 INTEGER)
BEGIN
DECLARE NUMBER2 INTEGER;
SET NUMBER2=(SELECT COUNT(*) FROM Employees);
SET NUMBER1=NUMBER2;
END $$
DELIMITER;
CALL TEST(@NUMBER);
select @NUMBER;
(2)创建存储过程,比较两个员工的实际收入,若前者比后者高就输出0,否则输出1.
DELIMITER $$
CREATE PROCEDURE
COMPA(IN ID1 CHAR(6),IN ID2 CHAR(6),OUT BJ INTEGER)
BEGIN
DECLARE SR1,SR2 FLOAT(8);
SELECT InCome-OuTCome INTO SR1 FROM Salary WHERE EmployeesID=ID1;
SELECT InCome-OuTCome INTO SR2 FROM Salary WHERE EmployeesID=ID2;
IF ID1>ID2 THEN
SET BJ=0;
ELSE
SET BJ=1;
END IF;
END$$
DELIMITER;
CALL COMPA('000001','108991',@BJ);
SELECT @BJ;
(3)创建存储过程,使用游标确定一个员工的实际收入是否排在前三名。结果为TRUE表示是,结果为FLASE表示否;
DELIMITER $$
CREATE PROCEDURE
TOP_THREE (IN EM_ID CHAR(6),OUT OK BOOLEAN)
BEGIN
DECLARE X_EM_ID CHAR(6);
DECLARE ACT_IN,SEQ INTEGER;
DECLARE FOUND BOOLEAN;
DECLARE SALARY_DIS CURSOR FOR
SELECT EmployeesID,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 SWQ<