mysql 存储过程中limit
mysql 存儲(chǔ)過(guò)程中l(wèi)imit
1、mysql的高版本(5.5),存儲(chǔ)過(guò)程中的limit可以使用變量,如下:select * from student limit iStart,iNum;
2、mysql的低版本(5.1),存儲(chǔ)過(guò)程中的limit不能使用變量,編譯報(bào)錯(cuò),如下:You have an error in your SQL syntax, ...near iStart,iNum
3、怎么解決低版本的問(wèn)題?
可以使用執(zhí)行動(dòng)態(tài)sql語(yǔ)句,把整個(gè)sql語(yǔ)句傳給存儲(chǔ)過(guò)程。靜態(tài)sql語(yǔ)句,編譯的時(shí)候是sql的語(yǔ)句結(jié)構(gòu)就已經(jīng)確定下來(lái)。而動(dòng)態(tài)sql語(yǔ)句,是在執(zhí)行的時(shí)候,才知道sql的語(yǔ)句結(jié)構(gòu)。注意:綁定變量也是靜態(tài)sql語(yǔ)句,sql語(yǔ)句結(jié)構(gòu)確定下來(lái)了,等著填空。動(dòng)態(tài)sql語(yǔ)句如下:
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; -- 釋放掉預(yù)處理段
set _totalCount =0;
select FOUND_ROWS() into _totalCount;
END
;;
DELIMITER ;
注意:DELIMITER ;;的意思。mysql中默認(rèn)分號(hào); 是一個(gè)執(zhí)行的結(jié)束,而存儲(chǔ)過(guò)程中包含多個(gè)語(yǔ)句,分號(hào)間隔,這些語(yǔ)句是一起執(zhí)行的,怎么解決這個(gè)問(wèn)題?
DELIMITER ;; 告訴mysql 下面的語(yǔ)句一起執(zhí)行,直到遇到兩個(gè)分號(hào);; ?上面的存儲(chǔ)過(guò)程執(zhí)行完之后,DELIMITER ; 把分隔符切換為單個(gè)分號(hào);
總結(jié)
以上是生活随笔為你收集整理的mysql 存储过程中limit的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Redis windows学习(二)——
- 下一篇: VB编程操作AutoCAD线型