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; -- 釋放掉預處理段

  set _totalCount =0;
  select FOUND_ROWS() into _totalCount;
END
;;
DELIMITER ;

注意:DELIMITER ;;的意思。mysql中默認分號; 是一個執行的結束,而存儲過程中包含多個語句,分號間隔,這些語句是一起執行的,怎么解決這個問題?

DELIMITER ;; 告訴mysql 下面的語句一起執行,直到遇到兩個分號;;  上面的存儲過程執行完之后,DELIMITER ; 把分隔符切換為單個分號;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM