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; -- 釋放掉預處理段
set _totalCount =0;
select FOUND_ROWS() into _totalCount;
END
;;
DELIMITER ;
注意:DELIMITER ;;的意思。mysql中默認分號; 是一個執行的結束,而存儲過程中包含多個語句,分號間隔,這些語句是一起執行的,怎么解決這個問題?
DELIMITER ;; 告訴mysql 下面的語句一起執行,直到遇到兩個分號;; 上面的存儲過程執行完之后,DELIMITER ; 把分隔符切換為單個分號;