mysql 預存程序中limit

來源:互聯網
上載者:User

標籤:

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 ; 把分隔字元切換為單個分號;

mysql 預存程序中limit

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.