를 사용할 때 1064 우리는 한계 & 양 (limitCount) 매개 변수를 긴 SQL 프로 시저가 있습니다. 그래서 우리는 여러 쿼리를 결합하기 위해 concat 문을 사용하고 있습니다. 이 프로 시저를 호출하면 실행하려고 할 때 err.no 1064가 제공됩니다.MySQL을 저장 프로 시저가 err.no을 제공합니다 : 우리는 CONCAT 문
편집 : 주석을 바탕으로, 나는 전체 코드를 추가하고 있습니다.
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
누구든지이 오류가 발생하는 이유에 대해 알고 계십니까?
ERROR : #1064 - 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 'IF(18 = 18) THEN SELECT T.task_id, T.name, D.add_time, D.location, DATE_' at line 2
PS : DELIMITER이 저장 프로 시저에서 쿼리가 만들어진 방식 때문에
정확히 어떤 오류? 오류가 시작되는 행이나 문자를 지정합니다. –
정확한 오류를 추가했습니다. @Michael – aacanakin
그러나 내 생각 엔 당신이 당신의 쿼리에서 예약어를 사용되면, 어쩌구 blahs없이 전체 쿼리를 게시 도움이 될 것입니다. 어쩌면? – Gary