2014-06-10 156 views
-1

我有兩個存儲過程與靜態的第一個參數,它工作得很好 但是當我而是動態的參數,它給了我一個錯誤未聲明的變量:limitvar
1 /程序MYSQL:未聲明的變量

`DELIMITER $$ 

DROP PROCEDURE IF EXISTS `gestprospects`.`recClientsFiltre` $$ 
CREATE PROCEDURE `recClientsFiltre`(IN params text, in limitvar int , in offsetvar int) 

BEGIN 
SET @query := concat(concat("SELECT ... WHERE CONCAT(clients.id,'-') in (",params),") limit 10,10"); 
    PREPARE stmt FROM @query ; 
    EXECUTE stmt ; 
    DEALLOCATE PREPARE stmt; 

END $$ 

DELIMITER ;` 

2 /程序

DELIMITER $$ 

DROP PROCEDURE IF EXISTS `gestprospects`.`recClientsFiltre` $$ 
CREATE PROCEDURE `recClientsFiltre`(IN params text, in limitvar int , in offsetvar int) 

BEGIN 
SET @query := concat(concat("SELECT ... WHERE CONCAT(clients.id,'-') in (",params),") limit limitvar,offsetvar"); 
    PREPARE stmt FROM @query ; 
    EXECUTE stmt ; 
    DEALLOCATE PREPARE stmt; 

END $$ 

DELIMITER ; 

謝謝您的回覆

+0

我看不到你的兩個聲明之間的一個區別。請指出區別在哪裏,因爲玩Spot the Difference是很乏味的。另外,請說明「靜態」或「動態」(參數)的含義。如果這與您調用該程序的方式有關,那麼包括該呼叫是一個好主意。 – RandomSeed

+0

好的,我明白了。看看我如何剝離你的代碼,只顯示重要的部分。請嘗試將來提供[MCVE示例](http://stackoverflow.com/help/mcve)。 – RandomSeed

回答

0

您在動態查詢中包含了字符串limitvaroffsetvar,而您希望包含它們的值。

@query := CONCAT(
    "SELECT ... WHERE CONCAT(clients.id,'-') IN (", params,")", 
    " LIMIT ", limitvar, ", ", offsetvar); 

注意你怎麼能concatenate several strings在一個呼叫CONCAT();