2013-04-22 6 views
2

Я написал процедуру в 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// 

Я надеюсь, что это будет полезно для вас ,

ответ

2

Я вижу несколько ошибок в вашем коде, особенно в отношении имен переменных, написанных по-разному или не объявленных вообще. Проверьте этот код, который должен быть действительным:

delimiter // 

CREATE PROCEDURE randomDefVal(val varchar(50), tableName varchar(50),OUT randomVal varchar(50)) 

BEGIN 

SET @tmpTableName = tableName; 
SET @tmpVal = val; 
SET @randomVal = randomVal; 

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 
// 
+0

Я вижу, какие ошибки я совершил. Но все время у меня такая же ошибка. Возможно, я неправильно назвал эту процедуру. Я просто сделал «CALL randomDefVal (« xyz »,« abc », @ randomVal). Как мне исправить вызов этой процедуры и как я могу получить правильный доступ к randomVal, в котором я сохранил результат выполнения? – Ziva

Смежные вопросы