Я пытаюсь создать следующую процедуру, которую я экспортировал с другого сервера, но получаю сообщение об ошибке.
CREATE PROCEDURE `spGetWorkHistoryByEmployeeID`(pEmployeeID int, pStartIndex int, pCount int)
BEGIN
DECLARE LowerBound INT;
DECLARE UpperBound INT;
DECLARE rownum INT;
SET LowerBound = ((pStartIndex - 1) * pCount) + 1;
SET UpperBound = ((pStartIndex - 1) * pCount) + pCount;
SELECT
rank, JobNumber, EarliestDate, LatestDate, BillableHours
FROM
(SELECT
*, @rownum:=@rownum + 1 AS rank
FROM
(SELECT
j.JobNumber, s.EarliestDate, s.LatestDate, s.BillableHours
FROM
service s
LEFT JOIN Job j ON s.JobID = j.JobID
WHERE
s.EmployeeAssignedID = pEmployeeID
AND s.LatestDate < NOW()
ORDER BY s.LatestDate DESC) d, (SELECT @rownum:=0) r) m
WHERE
rank >= LowerBound
AND rank <= UpperBound;
END
Ошибка говорит: Error Code: 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 'rank FROM ( SELECT j.JobNumber, s.EarliestDate, s.LatestDat' at line 2
MySql Workbench показывает покачивание под первымSELECT
с всплывающей подсказкой "SELECT" is not valid at this position for this server version, expecting '(', WITH
Это MySql Community Server 8.0.12, что важно.
Есть идеи, что не так?процедура существует на другом сервере и работает хорошо.
ОБНОВЛЕНИЕ: проблема решена!очевидно, начиная с v.8.0.2 RANK
это зарезервированное слово.Сервер, с которого я скопировал базу данных, является более старой версией.Спасибо @ Ник!