2011-10-21 68 views
0

希望一切都与你太好了,我现在面临一个问题,存储过程,去追逐,下面的代码:错误1146存储过程

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

工作台上喊我出来与此异常:

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

其实它的承诺在SP首先插入语句,但是当它到达的select语句,我得到了上面的例外,虽然我死肯定表,job_seeker,在那里,你能不能告诉我什么不顺心我的SP,为这是第一次在SP里面使用多个语句,变量也是,谢谢。

+0

是否有可能你作为另一个用户连接,并且该用户无法访问该表?你需要做一些补助吗?或者您是否以“招聘”身份登录,但该表是否存在于另一个架构中? – Marvo

回答

0

你已编码的文字作为表名 - 你想让MySQL 评估变量,然后执行作为动态SQL。下面是你如何做到这一点:

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

没听说动态SQL之前,谢谢你让我知道,但问题依然存在,没有得到插入job_seeker表,target_table,但我已经有了一个新的异常,而不是最后一个,错误代码:1241 操作数应包含1列(S) – Rehme