LIMIT не работает с пользовательскими параметрами в хранимой процедуре в MySQL 8.0 - PullRequest
0 голосов
/ 31 октября 2018

Когда я пытаюсь получить сведения о пользователе из таблицы сведений о пользователе, используя хранимую процедуру , оператор LIMIT не работает с параметрами startIndex и endIndex. Код ниже выдает ошибку MySQL 2013, то есть Lost connection to MySQL server during query.

Это будет происходить только в MySQL версии 8.0, и правильно работать в следующих версиях, таких как 5.7 и т. Д. И также работать, когда я удаляю из процедуры условие LIMIT .

После этого я попытался с помощью PREPARE STMT, этот запрос выдает ошибку из-за многократного использования CONCAT.

CREATE PROCEDURE return_something(IN markFilter VARCHAR(100), IN nameFilter VARCHAR(100), IN startIndex INT, IN endIndex INT)
BEGIN
CREATE TEMPORARY TABLE temp_user_details
SELECT id, name, address FROM user_details  
WHERE (CASE WHEN markFilter!='' THEN FIND_IN_SET(mark,markFilter) ELSE mark IS NOT NULL END) 
AND (CASE WHEN nameFilter !='' THEN name LIKE CONCAT('%',nameFilter,'%') ELSE id IS NOT NULL END)
LIMIT startIndex, endIndex;

SELECT id, name FROM temp_user_details;
DROP TEMPORARY TABLE return_something;
END
call return_something('','', 0, 100);

1 Ответ

0 голосов
/ 31 октября 2018

Скорее всего, причиной является тайм-аут. Предложение LIMIT может замедлить запрос и, следовательно, время ожидания соединения.

Вы не указали, откуда вы вызываете процедуру. Если вы звоните из командной строки, вы можете попытаться настроить переменную connect_timeout.

...