先从有一个存储过程开始看

下面的这个存储过程内容涉及 判断 循环 异常的处理,功能是输入一个值根据这个值查询出数据后返回信息

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 //