#mysql #mysql-workbench
#mysql #mysql-workbench
Вопрос:
Я пытался создать функцию хранимых процедур mysql, используя mysql workbench, которая покажет результат объединения данных двух таблиц на основе некоторых условий. Я также хочу передать имена таблиц в качестве параметра.
Мой код здесь:
CREATE PROCEDURE `Get_Texts`(IN wrd longtext, IN dbname longtext,
IN splitdbname longtext,
IN lang longtext)
BEGIN
SET @sql_ = CONCAT('SELECT * FROM ',dbname,' as ifxcd
INNER JOIN
',splitdbname,' as ifxsd
ON
ifxsd.Crawl_id = ifxcd.Id where ifxsd.Language = ',lang,'
AND ifxsd.Word Like ',wrd,'%
order by ifxsd.Percentage desc
limit 100');
PREPARE statement_ FROM @sql_;
EXECUTE statement_ ;
END
Вызов функции:
call Get_Texts('acc', emp_info, split_emp_txt , 'English(en)');
После вызова функции я получаю сообщение об ошибке
‘Неизвестный столбец ’emp_info’ в списке полей
Как я могу преодолеть это и увидеть желаемый результат? Заранее спасибо.
Комментарии:
1.
call Get_Texts('acc', 'emp_info', 'split_emp_txt' , 'English(en)');
. И заключите вставленные литералы в кавычки в CONCAT.2. Спасибо за ваше предложение. Конечно, это исправление, но проблема была в синтаксисе запроса.
Ответ №1:
УСТАНОВИТЕ udv перед вызовом и префикс emp_iinfo с символом at. то же самое для split_emp_text, например
set @emp_info = 'aaa';
set @split_emp_text = 'bbb'
call Get_Texts('acc', @emp_info, @split_emp_txt , 'English(en)');
Ответ №2:
Проблема заключается в синтаксисе запроса, как я обнаружил, наконец. Вот правильный код:
CREATE PROCEDURE `Get_Texts`(IN wrd longtext, IN dbname longtext,
IN splitdbname longtext, IN lang longtext)
BEGIN
SET @sql_ = CONCAT("SELECT * FROM `",dbname ,"` as ifxcd
INNER JOIN `",splitdbname,"` as ifxsd ON ifxcd.id = ifxsd.Crawl_id
where ifxsd.Language = '",lang,"' and ifxsd.Word Like '",wrd,"%'
ORDER BY ifxsd.percentage DESC
limit 100");
PREPARE statement_ FROM @sql_;
EXECUTE statement_ ;
DEALLOCATE PREPARE statement_;
END
Процедура вызова:
call Get_Texts('acc', 'emp_info', 'split_emp_txt' , 'English');