在编辑mysql存储过程的时候,有时候需要将变量当做一个字段加到查询或者更新中去。这时候运用正常的查询语句是没法执行的。因为变量最后是当做字符串输出,在存储过程中字符串无法当做sql语句的字段使用。
这时候需要定义一个变量,配合PREPARE,EXECUTE来使用.这种方法可以用到PROCEDURE过程中,没法用到函数中.
例子如下:
想要统计某些工作岗位的人数。但是目标表的岗位是横向展示的:
用户表 tmp_user
id | 名字 | 公司 | 岗位 |
---|---|---|---|
1 | A君 | A分公司 | 财务 |
2 | B君 | B分公司 | 销售 |
3 | C君 | A分公司 | 财务 |
目标表 tmp_ob
分公司 | 财务 | 销售 |
---|---|---|
A分公司 | – | – |
B分公司 | – | – |
BEGIN
declare li_id int default 0;
declare li_job varchar(100) default '';
declare li_company varchar(100) default '';
declare done int default false;
declare cur cursor for select id from tmp_user;
declare continue HANDLER for not found set done = true;
open cur;
read_loop:loop
fetch cur into li_id;
if done then
leave read_loop;
end if;
select 岗位,公司 into li_job,li_company from tmp_user a where a.id = li_id;
set @s = CONCAT("update tmp_ob set ",li_job,"=",li_job,"+1 where 分公司=",li_company );
PREPARE stmt FROM @s;
EXECUTE stmt;
end loop;
close cur;
end;