2013-04-25 4 views
1

Я написал эту функцию:MySQL - функция, которая возвращает выполнение Value

delimiter // 

CREATE FUNCTION randomDefVal(val varchar(30), tableName varchar(30)) 
    returns varchar(30) 

    BEGIN 

     SET @query = concat('SELECT ',val,' FROM ',tableName,' ORDER BY rand() LIMIT 1;'); 
     SET @result = NULL; 
     PREPARE stmt1 FROM @query; 
     return (EXECUTE stmt1); 

    END// 

Но у меня есть ошибка в последней строке:

SQL Error (1336): Dynamic SQL is not allowed in stored function or trigger 

что говорит о том, что я не могу писать «возвращать (ВЫПОЛНИТЬ stmt1);» Как я могу вернуть значение, которое будет результатом оператора EXECUTE?

+0

Я получаю эту ошибку: ** 'SQL Error (1336): Dynamic SQL не допускается в сохраненной функции или триггере ** – hjpotter92

ответ

1

Я думаю, что вы хотите, это SELECT ... INTO. Таким образом, вы бы что-то вроде этого в пределах вашего BEGIN и END (обратите внимание, что я не проверял этот код):

BEGIN 
    DECLARE var_name VARCHAR(30); 
    SET var_name = ''; 
    SELECT val INTO var_name FROM tableName ORDER BY rand() LIMIT 1; 
    RETURN var_name; 
END 
Смежные вопросы