We have a long sql procedure that takes limit and amount (limitCount) parameters. So, we use the concat operator to combine multiple queries. Calling this procedure gives err.no 1064 when we try to start it.
EDIT: based on the comment, I add all the code.
CREATE PROCEDURE getProfileTasks (IN p_id1 INT, IN p_id2 INT , IN limitStart INT, IN limitCount INT) BEGIN SET @SQL = CONCAT(' SELECT P.access_type INTO @privacy FROM Profile P WHERE P.profile_id = ' , p_id2 , '; IF( ' , p_id1, ' = ' ,p_id2 , ') THEN SELECT T.task_id, T.name, D.add_time, D.location, DATE_FORMAT(D.date1, "%d/%m/%y") as `date1`, D.time3, D.state, TIME_FORMAT(D.time1, "%H:%i")as `time1`, D.does_id, IFNULL(L.Like, 0) AS `LikeCount` , IFNULL(C.CommentCount,0) AS `CommentCount` FROM Task T INNER JOIN Does D on D.task_id = T.task_id INNER JOIN Profile P on P.profile_id = D.profile_id LEFT OUTER JOIN ( SELECT D.does_id, COUNT(L.profile_id) as `Like` FROM `Likes` L INNER JOIN Does D on D.does_id = L.does_id INNER JOIN Profile P on P.profile_id = D.profile_id WHERE P.profile_id = ' , p_id2 , ' GROUP BY does_id) L on L.does_id = D.does_id LEFT OUTER JOIN( SELECT D.does_id, COUNT(C.content) AS `CommentCount` FROM Comment C INNER JOIN Does D on D.does_id = C.does_id GROUP BY (D.does_id)) C ON C.does_id = D.does_id WHERE P.profile_id= ' , p_id2, ' ORDER BY D.add_time DESC LIMIT ' , limitStart , ', ' , limitCount, '; ELSE IF (@privacy = 0) THEN SELECT T.task_id, T.name, D.add_time, D.location, DATE_FORMAT(D.date1, "%d/%m/%y") as `date1`, D.time3, D.state, TIME_FORMAT(D.time1, "%H:%i")as `time1`, D.does_id, IFNULL(L.Like,0) AS `LikeCount`, IFNULL(C.CommentCount,0) AS `CommentCount` FROM Task T INNER JOIN Does D on D.task_id = T.task_id INNER JOIN Profile P on P.profile_id = D.profile_id LEFT OUTER JOIN ( SELECT D.does_id, COUNT(L.profile_id) as `Like` FROM `Likes` L INNER JOIN Does D on D.does_id = L.does_id INNER JOIN Profile P on P.profile_id = D.profile_id WHERE P.profile_id = ' , p_id2 , ' GROUP BY does_id) L on L.does_id = D.does_id LEFT OUTER JOIN( SELECT D.does_id, COUNT(C.content) AS `CommentCount` FROM Comment C INNER JOIN Does D on D.does_id = C.does_id GROUP BY (D.does_id) )C ON C.does_id = D.does_id WHERE P.profile_id= ' ,p_id2, ' ORDER BY D.add_time DESC LIMIT ' , limitStart , ', ' , limitCount, '; ELSE IF EXISTS ( SELECT * FROM Follows F INNER JOIN Profile P on F.follower_id = P.profile_id INNER JOIN Profile P2 on F.following_id = P2.profile_id WHERE (P.profile_id = ' , p_id1, ' AND P2.profile_id = ' , p_id2 , ')) THEN SELECT T.task_id, T.name, D.add_time, D.location, DATE_FORMAT(D.date1, "%d/%m/%y") as `date1`, D.time3, D.state, TIME_FORMAT(D.time1, "%H:%i")as `time1`, D.does_id, IFNULL(L.Like,0) AS `LikeCount`, IFNULL(C.CommentCount,0) AS `CommentCount` FROM Task T INNER JOIN Does D on D.task_id = T.task_id INNER JOIN Profile P on P.profile_id = D.profile_id LEFT OUTER JOIN ( SELECT D.does_id, COUNT(L.profile_id) as `Like` FROM `Likes` L INNER JOIN Does D on D.does_id = L.does_id INNER JOIN Profile P on P.profile_id = D.profile_id WHERE P.profile_id = ' , p_id2 , ' GROUP BY does_id) L on L.does_id = D.does_id LEFT OUTER JOIN( SELECT D.does_id, COUNT(C.content) AS `CommentCount` FROM Comment C INNER JOIN Does D on D.does_id = C.does_id GROUP BY (D.does_id) )C ON C.does_id = D.does_id WHERE P.profile_id= ' , p_id2 , ' ORDER BY D.add_time DESC LIMIT ' , limitStart , ', ' , limitCount, '; END IF; END IF; END IF; ' ); PREPARE query FROM @SQL; EXECUTE query; DEALLOCATE PREPARE query; END
Does anyone have an idea why we get this error?
ERROR :
PS: DELIMITER is set to //