我正在尝试编写一个函数来返回对存储过程的调用将返回的行数。我试图尽量减少代码的重复(为了减少代码维护/调试——过程选择很长)。
存储过程只是只读选择符合某些条件的行(我知道模糊,但细节不应该对问题很重要)。
我可以将过程复制到一个函数中并将 select 更改为 count() 但由于它有多个连接,我希望编写一个可以调用过程并返回行数的函数。目标不是优化运行,而是有效的代码维护,减少样板。
我试过这个作为测试:
DELIMITER //
CREATE PROCEDURE IF NOT EXISTS proc_select1()
BEGIN
SELECT 1;
END //
CREATE FUNCTION IF NOT EXISTS select1_count() RETURNS INT UNSIGNED
BEGIN
CALL proc_select1();
RETURN FOUND_ROWS();
END //
DELIMITER ;
但是,当我SELECT select1_count();
- 我希望会返回时1
- 我得到“无法从函数返回结果集”错误。
我尝试分配FOUND_ROWS
给一个变量,清除结果集然后返回变量值,但无法让它工作。
有谁知道解决方法还是我真的需要复制粘贴该过程并转换为一个SELECT COUNT
和函数?
我正在使用 MySQL 5.5.16(必要时可以升级)、Windows 7(似乎没有人想要升级:) 和 HeidiSQLv7.0.0.4053(如果相关)
与往常一样,非常感谢任何帮助。