首页 > 解决方案 > 如何使用存储过程、游标和 for 循环获取表值?

问题描述

我正在构建一个使用游标和循环的存储过程。我了解代码的工作原理,但在创建条件时遇到了麻烦。我不明白如何根据输入参数调用代码来检查某些单元格中的空值。

我的代码解释:我正在检查成员是否有任何过期书籍。在我称为“borrowedby”的表中,有变量“MemberID”、“ReturnDate”和“BookID”。ReturnDate 是图书归还的日期。输入参数“memberIDEN”必须等于“MemberID”并检查“ReturnDate”是否为空。如果它为空,那么我打印出 memberID 和过期的书籍。

如何创建一个条件来检查表“borrowedby”中的“ReturnDate”是否为空?

delimiter //
drop procedure if exists overdueBooks  //

delimiter //
create procedure overdueBooks  (in memberid INT)

begin
declare returnCheck date;
declare finished int default 0;
declare overdueList varchar (100) default "";

declare cursor_data cursor for 
select MemberID 
from borrowedby 
where memberid = MemberID;

declare continue handler for not found set finished = 1;

open cursor_data;

get_members: loop
    fetch cursor_data into overdueList;
    
    if returnCheck is not null 
        then
            leave get_members;
    end if;
end loop get_members;
close cursor_data;
end
//
delimiter ;

标签: mysqlfor-loopstored-procedurescursorprocedure

解决方案


看来SP是多余的。

SELECT *
FROM borrowedby 
WHERE @memberIDEN = MemberID
  AND returnCheck IS NULL

此查询返回指定成员的所有未归还书籍。


推荐阅读