Как использовать переменные в пользовательских функциях mysql в запросе ?

Добрый день. Есть такая задача. При добавлении значений в таблицу одно из полей пересортировывать и добавлять триггером в другую ячейку.

То есть, есть поле в котором находится текст - "Один Два Три Четыре"
Должно произойти преобразование и получиться на выходе - "Два Один Три Четыре" (То есть по алфавиту)

В Mysql таких функций нет, пробую написать свою. PHP не используется, все делается средствами базы.
DELIMITER $$

CREATE  FUNCTION `SORT_STR`(`string1` VARCHAR(255)) RETURNS varchar(255) CHARSET utf8
BEGIN
DECLARE i INT(2) Default 0;
DECLARE sort VARCHAR(255);
DECLARE union_str VARCHAR(255);
DECLARE str1 VARCHAR(255);
DECLARE word VARCHAR(255);
SET str1 = string1; 

    sub_str_loop: LOOP
		SET i=i+1;
		SET word = SUBSTRING_INDEX(str1,' ', 1);
		SET str1 = trim(replace(str1, word, ''));
		IF i = 1 THEN
			SET union_str = concat('select ',word,' as words');
		ELSE 
			SET union_str = concat(union_str, ' UNION select ',word);
		END IF;
		IF str1 = '' THEN
			LEAVE sub_str_loop;
		END IF;
    END LOOP sub_str_loop;

		select group_concat(`words` ORDER BY `words` asc SEPARATOR  ' ') as words into sort from (union_str);
RETURN union_str;
END


Последовательность такова. Я разбираю строку, составляю запрос который мне все эти слова выведет как строки, их отсортирует и выведет в ответ.
В цикле у меня получается такая конструкция
SELECT 'Один' as words
   UNION SELECT 'Два'
   UNION SELECT 'Три' 
   UNION SELECT 'Четыре'


Но в финале когда эта конструкция должна вставиться в финальный запрос
select group_concat(`words` ORDER BY `words` asc SEPARATOR  ' ') as words into sort from <i><b>(union_str);</b></i>


Я получаю ошибку при выполнении.
В запросе моя переменная интерпретируется как имя таблицы. и Совсем не хочет вставляться текстом. Как это исправить можно ?

Если есть другое решение этой задачи буду рад выслушать вас.
  • Вопрос задан
  • 2645 просмотров
Решения вопроса 1
@whats Автор вопроса
Решение - Никак. Динамический SQL запрещен в хранимых функциях, нужно искать другое решение.
Я решил задачу с помощью временных таблиц
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы