这有效:
的MySQL>从1_um中选择user_id,meta_value,其中meta_key ='1_caps';
我想要的是:
插入1_um(user_id,meta_key,meta_value)值(user_id = $ uid,meta_key ='2_caps',meta_value = $ mval);
但是我在SP的尝试中不断受到零行影响。这就是我所拥有的:
分隔符//
创建过程import_um()
BEGIN
declare done int default FALSE;
declare $uid bigint(20) unsigned default 0;
declare $mval longtext default "";
declare curs cursor for select user_id, meta_value from 1_um where meta_key='1_caps';
declare continue handler for not found set done = TRUE;
open curs;
read_loop: LOOP
fetch curs into $uid,$mval;
insert into 1_um (user_id, meta_key, meta_value) values (user_id=$uid, meta_key='2_caps', meta_value=$mval);
if done then leave read_loop;
end if; end LOOP; close curs; END//
移动“如果完成则离开read_loop;结束if;”直接在fetch语句下面(在insert语句之上)也没有效果。
看起来fetch变量var2不起作用,因为我尝试用select concat替换insert语句('my var is',$ uid);并没有得到STDOUT。
表1_um包含四列:umid(auto inc),user_id,meta_key,meta_value。我是否必须将所有这些选择到光标中?
答案 0 :(得分:1)
为什么在代码中使用循环?只需使用insert . . . select
:
insert into 1_um (user_id, meta_key, meta_value)
select user_id, '2_caps', meta_value
from 1_um
where meta_key = '1_caps';
毫无疑问,你的问题的一部分是错误的VALUES
子句(你有值的布尔表达式,这看起来并不正确)。您还应该学习如何正确使用VALUES
。但是对于这个问题,请使用正确的SQL构造。