Я написал процедуру в mysql, которая возвращает случайное значение из таблицы. Но у меня много таблиц, и я хочу использовать эту процедуру много раз, поэтому я добавляю в качестве таблицы имен параметров процедуры, из которой я хочу присвоить значение rand, имя которой я передам в процедуру также в качестве аргумента:MySQL - как сохранить результат выполнения
delimiter //
CREATE PROCEDURE randomDefVal(val varchar(50), tableName varchar(50),OUT randomVal varchar(50))
BEGIN
SET @tmpTableName = tableName;
SET @sql_querry = concat('SELECT',@tmpVal,'FROM',@tmpTableName,'ORDER BY rand() LIMIT 1');
PREPARE stmt FROM @sql_text;
EXECUTE stmt using @randomVal;
DEALLOCATE PREPARE stmt;
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 'NULL' at line 1
может кто-нибудь объяснить мой, как я могу сохранить результат EXECUTE
в переменной?
// РЕШЕНИЕ
Для тех людей, как была та же проблема, как у меня было, я хочу, чтобы показать пример решения, которое я сделал:
delimiter //
CREATE PROCEDURE tmpProcedure(tableName varchar(20))
BEGIN
DECLARE my_query varchar(60);
DECLARE value varchar(20);
SET @my_query = concat('Select Name FROM ',tableName,' ORDER BY rand() LIMIT 1 INTO @outvar');
PREPARE stmt from @my_query;
EXECUTE stmt;
SET val = (SELECT @outvar);
END//
Я надеюсь, что это будет полезно для вас ,
Я вижу, какие ошибки я совершил. Но все время у меня такая же ошибка. Возможно, я неправильно назвал эту процедуру. Я просто сделал «CALL randomDefVal (« xyz »,« abc », @ randomVal). Как мне исправить вызов этой процедуры и как я могу получить правильный доступ к randomVal, в котором я сохранил результат выполнения? – Ziva