MYSQL 存储过程发生Result consisted of more than one r...
2013-09-24 16:15
337 查看
SELECT … INTO …
这个SELECT语法把选定的列直接存储到变量。因此,只有单一的行可以被取回。
在使用的时候,要注意,加上LIMIT 1
SELECT id,data INTO x,y FROM topic LIMIT 1;
另外,这种赋值语句还有个规矩就是参数名和字段名不能冲突,不然能够执行过去,但是却没有给参数赋值,这是个很隐性的错误,可以参考手册上的:
重要: SQL变量名不能和列名一样。如果SELECT ... INTO这样的SQL语句包含一个对列的参考,并包含一个与列相同名字的局部变量,MySQL当前把参考解释为一个变量的名字。
DELIMITER //
CREATE PROCEDURE mytopic (
topicId INT(4),
title VARCHAR(50)
)
BEGIN
SELECT topicId,title
INTO topicId,title
FROM tbl_topic limit 1;
END//
DELIMITER ;
当这个程序被调用的时候,无论topicId,title列的值是什么,变量newname将返回值‘NULL’。
即:
CALL mytopic(@topicId,@title);
SELECT @topicId,@title;
显示结果:
@topicId @title
NULL NULL
这个SELECT语法把选定的列直接存储到变量。因此,只有单一的行可以被取回。
在使用的时候,要注意,加上LIMIT 1
SELECT id,data INTO x,y FROM topic LIMIT 1;
另外,这种赋值语句还有个规矩就是参数名和字段名不能冲突,不然能够执行过去,但是却没有给参数赋值,这是个很隐性的错误,可以参考手册上的:
重要: SQL变量名不能和列名一样。如果SELECT ... INTO这样的SQL语句包含一个对列的参考,并包含一个与列相同名字的局部变量,MySQL当前把参考解释为一个变量的名字。
DELIMITER //
CREATE PROCEDURE mytopic (
topicId INT(4),
title VARCHAR(50)
)
BEGIN
SELECT topicId,title
INTO topicId,title
FROM tbl_topic limit 1;
END//
DELIMITER ;
当这个程序被调用的时候,无论topicId,title列的值是什么,变量newname将返回值‘NULL’。
即:
CALL mytopic(@topicId,@title);
SELECT @topicId,@title;
显示结果:
@topicId @title
NULL NULL
相关文章推荐
- 通过powerdesign查看mysql数据库
- 删除mysql
- 使用MySQL命令行修改密码
- mysql远程访问 登录ERROR 1130: is not allowed to connect to this MySQL server解决办法
- MySQL之Join
- mysql左连接
- mysql 中取得汉字字段的各汉字首字母
- MySQL创建Function时报的1418错误代号解决办法
- MySQL CAST与CONVERT 函数的用法
- MYSQL 导入慢
- mysql 查询技巧
- 如何查看mysql索引
- MySql binlog日志详解
- mysql 在多个表中查询同一个值
- mysql 的编码配置问题及解决方案--------windows
- 引用 MySQL使用基于Parameter方式代码,总是提示:“Column '列名' cannot be null”
- 如何设置MySQL远程连接
- mysql 获取字符串长度
- MySQL – 不要为运行应用程序的用户分配DBA权限
- mysql主从复制实现SSL加密和半同步复制