先从有一个存储过程开始看
下面的这个存储过程内容涉及 判断 循环 异常的处理,功能是输入一个值根据这个值查询出数据后返回信息
DROP PROCEDURE IF EXISTS GetEmployeeName;
DELIMITER //
CREATE PROCEDURE GetEmployeeName(
IN p_employee_id INT,
OUT p_employee_name VARCHAR(255)
)
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE emp_name VARCHAR(255);
-- 声明游标
DECLARE cur CURSOR FOR
SELECT employee_name
FROM employees;
WHERE employee_id = p_employee_id;
-- 定义当游标未找到数据时执行的处理方法
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 打开游标
OPEN cur;
-- 循环读取游标数据
read_loop: LOOP
FETCH cur INTO emp_name;
IF done THEN
LEAVE read_loop;
END IF;
-- SELECT SLEEP(5);
insert into tool values(concat(emp_name,CURRENT_TIMESTAMP));
END LOOP;
-- 关闭游标
CLOSE cur;
-- 处理未找到数据的情况
IF emp_name IS NULL THEN
SET p_employee_name = 'Employee not found';
ELSE
SET p_employee_name = emp_name;
END IF;
-- 演示条件处理
IF p_employee_id < 0 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Employee ID cannot be negative';
END IF;
-- 演示异常处理
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SET p_employee_name = 'An error occurred';
END;
-- 其他处理语句
END;
END //