Limit не работает с пользовательскими параметрами в хранимой процедуре в mysql 8.0

Когда я пытаюсь получить сведения о пользователе из таблицы сведений о пользователе с помощью Хранимая процедура, оператор 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);

Вы правильно расшифровали это - например, почему вы отбрасываете return _something, когда ваша временная таблица - temp_user_details? а откуда идет марка?

P.Salmon 31.10.2018 13:38
0
1
310
1

Ответы 1

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

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

Звонок из кодов PHP. Я считаю, что connect_timeout - неправильный метод. Это обходной путь.

Jithin Vijayan 15.11.2018 11:44

Как вы думаете, почему connect_timeout - неподходящий метод или обходной путь?

slaakso 15.11.2018 11:47

Другие вопросы по теме