天天看點

mysql 存儲過程中limit

1、mysql的高版本(5.5),存儲過程中的limit可以使用變量,如下:select * from student limit iStart,iNum;

2、mysql的低版本(5.1),存儲過程中的limit不能使用變量,編譯報錯,如下:You have an error in your SQL syntax, ...near iStart,iNum

3、怎麼解決低版本的問題?

可以使用執行動态sql語句,把整個sql語句傳給存儲過程。靜态sql語句,編譯的時候是sql的語句結構就已經确定下來。而動态sql語句,是在執行的時候,才知道sql的語句結構。注意:綁定變量也是靜态sql語句,sql語句結構确定下來了,等着填空。動态sql語句如下:

DROP PROCEDURE IF EXISTS `dmu_exedynamicsql_bypage`;

DELIMITER ;;

CREATE DEFINER=`root`@`%` PROCEDURE `dmu_exedynamicsql_bypage`(_qrySql MEDIUMTEXT, out _totalCount int)

BEGIN

  set @qrySql = _qrySql;

  prepare stmt from @qrySql;

  execute stmt;

  deallocate prepare stmt; -- 釋放掉預處理段