簡體   English   中英

如何傳遞對在mysql 5存儲過程中運行的查詢的限制?

[英]How do pass in a limit to a query run inside a mysql 5 stored procedure?

這是我想做的事的一個樣本。 查詢中存在LIMIT時,存儲過程無法創建。 如果我取消LIMIT,則創建程序。

CREATE PROCEDURE LimitTest(IN in_start INTEGER UNSIGNED, IN in_limit INTEGER UNSIGNED)
BEGIN
   DECLARE no_more_results INTEGER DEFAULT 0;
   DECLARE var_result INTEGER UNSIGNED;
   DECLARE row CURSOR FOR SELECT id from test LIMIT in_start,in_limit;
   DECLARE CONTINUE HANDLER FOR NOT FOUND 
    SET no_more_results = 1;
   OPEN  row;
      FETCH  row INTO var_result;
      REPEAT 
         INSERT INTO results VALUES(var_result);
         FETCH  row INTO var_result;
      UNTIL no_more_results = 1
      END REPEAT;
   CLOSE row;
END

問題在於,限制后的數字必須是一個常量,並且不能是一個參數,根據此錯誤報告參數在更高版本的MySQL中仍未修復 您可以嘗試這里概述的(丑陋)方法:

CREATE PROCEDURE sp (
IN LimitStart_ INT,
IN LimitCnt_ INT
)
BEGIN
SET @lim = CONCAT(' LIMIT ', LimitStart_, ',', LimitCnt_);
SET @q = "SELECT mycol FROM mytable";

SET @q = CONCAT(@q, @lim);
PREPARE st FROM @q;
EXECUTE st;
DEALLOCATE PREPARE st;
END;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM