#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 столбец (ы)