Ошибка 1146 с хранимой процедурой

#mysql

#mysql

Вопрос:

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

 DELIMITER $

CREATE DEFINER=`root`@`localhost` PROCEDURE `register`(in un varchar(45),in pw varchar(45),     

 in user_email varchar(45),
 in permissionid int,in targeted_table varchar(15))
 begin
 declare id int;
 declare target_table varchar(15);
 set target_table = targeted_table;

 insert into user_authentication(user_name,user_password,email,permission_id)
 values(un,pw,user_email,permissionid);

 select user_id into id
 from user_authentication
 where user_name = un;

 insert into target_table(user_id)values(id) ;
 end
 

всякий раз, когда я вызываю SP с помощью этого оператора :

   call register('abeer','somePassword','someEmail',1,'job_seeker')
 

workbench кричит на меня, выходя с этим исключением :

      Error Code: 1146
     Table 'recruitment.target_table' doesn't exist
 

Фактически он фиксирует первый оператор вставки в SP, но когда он достигает оператора select, я получил исключение выше, хотя я абсолютно уверен, что таблица job_seeker есть, не могли бы вы просто сказать мне, что пошло не так с моим SP, потому что это первый раз, когда используется несколькооператоры внутри SP, переменные тоже, спасибо.

Комментарии:

1. Возможно ли, что вы подключаетесь как другой пользователь, и у этого пользователя нет доступа к этой таблице? Возможно, вам нужно получить какие-то гранты? Или вы вошли в систему как «рекрутинг», но таблица существует в другой схеме?

Ответ №1:

Вы закодировали литерал для имени таблицы — вы хотите, чтобы mysql оценивал переменную, а затем выполнял ее как динамический sql. Вот как вы это делаете:

 PREPARE mycmd from CONCAT('insert into ', target_table, '(user_id) values(', id, ')');
EXECUTE mycmd;
 

Комментарии:

1. Никогда раньше не слышал о динамическом sql, спасибо, что сообщили мне об этом, но проблема все еще существует, ничего не было вставлено в таблицу job_seeker, target_table, но вместо последнего у меня появилось новое исключение, код ошибки: 1241 Операнд должен содержать 1 столбец (ы)