mysql - 我的第一个存储过程无法运行

标签 mysql stored-procedures

这有效:

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/

相关文章:

php - Yii 框架将提交的文件存储/保存到图像文件夹

mysql - FireDac MySql Connector.ExecSql 无法工作

MySql 选择最大值的总和

php - 在 MySQL Workbench 中创建存储过程

postgresql - 如何删除 Postgresql 中的存储过程?

entity-framework - 将 Entity Framework 与存储过程和未命名列一起使用

mysql - SELECT 可以单独工作,但在分配给游标时返回 0 行

php - MySQL 存储过程不能使用多个参数

mysql - 如何在sequelize.js中执行此SQL查询

php - 插入具有自动递增 ID 的新行未添加为数据库中的最后一个条目