Я пишу хранимую функцию, в которой вычисляю положение ячейки, значение которой мне нужно выбрать из таблицы. Для этого я решил сохранить эту позицию в переменной, чтобы использовать ее в качестве смещения предложения LIMIT.
Согласно моему исследованию, способ использования значений, установленных в локальные переменные с помощью оператора LIMIT, - через подготовленный оператор, но я также понял, что подготовленные операторы (или любой динамический SQL) разрешены в хранимых функциях. Есть ли альтернативы для решения моей проблемы?
Упрощенный пример моей ситуации:
CREATE FUNCTION foo(a int) RETURNS decimal DETERMINISTIC
BEGIN
SET @var1 := (SELECT COUNT(*) FROM table);
SET @var2 := (ROUND(@var1 * a/5))
PREPARE STMT FROM 'RETURN (SELECT * FROM other_table LIMIT ?, ?)';
EXECUTE STMT USING @var2, @var1;
END
$$ DELIMITER ;
В идеале, это даст мне тот результат, который мне нужен, там, где он мне нужен. Но, конечно, я получаю код ошибки 1336, говорящий «Динамический SQL не разрешен в хранимой функции или триггере»