2017-02-21 25 views
0

請幫我解決這個存儲過程做了錯誤:存儲過程MySQL的句法

CREATE DEFINER=`root`@`localhost` PROCEDURE `repos`(IN `order_condition` VARCHAR(100) CHARSET utf8, IN `from_date` VARCHAR(255) CHARSET utf8, IN `to_date` VARCHAR(255) CHARSET utf8, IN `dept_id` TINYINT(4), IN `type` VARCHAR(15) CHARSET utf8, IN `search_value` VARCHAR(50) CHARSET utf8, IN `institutionid` INT(11)) 
    NO SQL 
BEGIN 

set @strWhere = ""; 
set @strWhere = CONCAT(@strWhere,"t1.inst_id = ",instid); 
set @selectstr = ''; 
set @selectstr2 = ''; 
set @joinstr = ''; 
set @joinstr2 = ''; 
set @group2= ''; 

set @selectstr = CONCAT(",t2.`std_name`"); 
set @selectstr2= CONCAT(",t5.`student_name`,t5.`roll_no`,t5.`student_id`"); 
set @joinstr = CONCAT("left join standard_master as t2 on t1.`std_id`= t2.`std_id` "); 
set @joinstr2 = CONCAT("left join student_det as t5 on t1.`std_id`= t5.`std_id` "); 
set @strWhere = CONCAT(@strWhere," AND t1.std_id = ",dept_id); 
set @group2= CONCAT("t5.`student_id`"); 


SET @query = CONCAT("select t1.* ",@selectstr," , t3.term_name, SUM(t4.amount) as fee_amount",@selectstr2," FROM inst_fee AS t1 ",@joinstr," left join term_master as t3 on t1.term_id = t3.term_id left join inst_amtdet as t4 on t4.masterid = t1.masterid ",@joinstr2," WHERE ",@strWhere, " AND ",@group2, " NOT IN (select id from student_master) Group by t1.f_name ", order_condition); 

PREPARE stmt FROM @query; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

#select @query; 


END 

它顯示了一個語法錯誤:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IN(

請幫我修正這個錯誤。謝謝

+0

您的代碼沒有任何'IN('... –

+0

參數中有IN。 – Devart

+0

@Devart是的,但它沒有右括號當MySQL報告語法錯誤時,它總是包含一個字面引號所以這不是真正的消息或它是由不同的代碼觸發的 –

回答

0

語法無誤。它適用於新的MySQL服務器。

您可能會使用舊的MySQL服務器,其中CHARSET子句不支持字符串參數。檢查服務器版本的語法。

+0

Thanks.Ya我已經使用了分隔符,當我嘗試保存我得到錯誤。以保存 – User11

+0

我已經改變了答案檢查它是什麼服務器版本 – Devart

+0

Ya checcked它的5.6.21 – User11