Неизвестный столбец » в списке полей mysql и передача имени динамической таблицы при вызове функции mysql

#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');