这有效:
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()
开始
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;结束如果;”直接在 fetch 语句下方(在 insert 语句上方)也没有效果。
似乎提取到变量,var2 不起作用,因为我尝试用 select concat('my var is', $uid); 替换插入语句;并且没有任何内容发送到 STDOUT。
表 1_um 包含四列:umid (auto inc)、user_id、meta_key、meta_value。我必须将它们全部选择到光标中吗?
最佳答案
为什么在代码中使用循环?只需使用 insert 。 。 。选择
:
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
子句(您有值的 bool 表达式,这似乎不正确)。您还应该学习如何正确使用VALUES
。但对于这个问题,请使用正确的 SQL 构造。
关于mysql - 我的第一个存储过程无法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43562153/