CREATE DEFINER=`root`@`localhost` PROCEDURE `Code_Search_Code1`(
c varchar(20), a int)
begin
declare stmt varchar(2000); set @sql = concat('select * from warehouse where code like ''%',c,'%'' limit 0,',a);prepare stmt from @sql; execute stmt;
end
刚接触存储过程,如上代码能运行成功,我现在想在里面再添加一个返回参数,就是得到这个记录集有多少条数据,谁帮我修改一下好吗
c varchar(20), a int)
begin
declare stmt varchar(2000); set @sql = concat('select * from warehouse where code like ''%',c,'%'' limit 0,',a);prepare stmt from @sql; execute stmt;
end
刚接触存储过程,如上代码能运行成功,我现在想在里面再添加一个返回参数,就是得到这个记录集有多少条数据,谁帮我修改一下好吗
解决方案 »
- 关于mysql的存储过程的,表和视图有代码,就是下面改变视图的过程,怎么可以写一个存储过程
- java调用存储过程,抛异常,返回FUNCTION does not exist,哭笑不得
- 急死我了啊!谁帮帮忙?!刚刚安装完MySQL5.1,启动后,mysqld进程使用的物理内存300多M,虚拟内存也有300多M,怎么设置小点啊...高手进!
- 巨BT的sql分组查询
- 查询mysql中不同表中内容的命令如何写
- “鎔,昇”这些字怎么能正确插入到MYSQL里?
- 很急!关于修改数据库名字
- mysql如何启动(dos下)
- 这个sql语句怎么写
- mysql组合索引like的问题
- 想学习一下数据库,大家认为选用哪个好?
- MYSQL INNODB死锁问题
c varchar(20), a int)
begin
declare stmt varchar(2000); set @sql = concat('select * from warehouse where code like ''%',c,'%'' limit 0,',a);prepare stmt from @sql; execute stmt; SELECT FOUND_ROWS(); //返回行数
end
select @num;
A SELECT语句可能包括一个 LIMIT 子句,用来限制服务器返回客户端的行数。在有些情况下,需要不用再次运行该语句而得知在没有LIMIT 时到底该语句返回了多少行。为了知道这个行数, 包括在SELECT 语句中选择 SQL_CALC_FOUND_ROWS ,随后调用 FOUND_ROWS() :mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name -> WHERE id > 100 LIMIT 10;mysql> SELECT FOUND_ROWS();第二个 SELECT返回一个数字,指示了在没有LIMIT子句的情况下,第一个SELECT返回了多少行 (若上述的 SELECT语句不包括 SQL_CALC_FOUND_ROWS 选项,则使用LIMIT 和不使用时,FOUND_ROWS() 可能会返回不同的结果)。 通过 FOUND_ROWS()的有效行数是瞬时的,并且不用于越过SELECT SQL_CALC_FOUND_ROWS语句后面的语句。若你需要稍候参阅这个值,那么将其保存: mysql> SELECT SQL_CALC_FOUND_ROWS * FROM ... ;mysql> SET @rows = FOUND_ROWS();假如你正在使用 SELECT SQL_CALC_FOUND_ROWS, MySQL 必须计算出在全部结果集合中有所少行。然而, 这比不用LIMIT而再次运行问询要快,原因是结果集合不需要被送至客户端。 SQL_CALC_FOUND_ROWS 和 FOUND_ROWS() 在当你希望限制一个问询返回的行数时很有用,同时还能不需要再次运行问询而确定全部结果集合中的行数。一个例子就是提供页式显示的Web脚本,该显示包含显示搜索结果其它部分的页的连接。使用FOUND_ROWS() 使你确定剩下的结果需要多少其它的页。 SQL_CALC_FOUND_ROWS 和 FOUND_ROWS() 的应用对于UNION 问询比对于简单SELECT 语句更为复杂,原因是在UNION 中,LIMIT 可能会出现在多个位置。它可能适用于UNION中的个人 SELECT语句,或是总体上 到UNION 结果的全程。 SQL_CALC_FOUND_ROWS对于 UNION的意向是它应该不需要全程LIMIT而返回应返回的行数。SQL_CALC_FOUND_ROWS 和UNION 一同使用的条件是: SQL_CALC_FOUND_ROWS 关键词必须出现在UNION的第一个 SELECT中。
FOUND_ROWS()的值只有在使用 UNION ALL时才是精确的。若使用不带ALL的UNION,则会发生两次删除, 而 FOUND_ROWS() 的指只需近似的。
假若UNION 中没有出现 LIMIT ,则SQL_CALC_FOUND_ROWS 被忽略,返回临时表中的创建的用来处理UNION的行数。
LAST_INSERT_ID() LAST_INSERT_ID(expr)
自动返回最后一个INSERT或 UPDATE 问询为 AUTO_INCREMENT列设置的第一个 发生的值。
c varchar(20), a int,out hs int)
begin
declare stmt varchar(2000); set @sql = concat('select code from warehouse where code like ''%',c,'%'' limit 0,',a);prepare stmt from @sql; execute stmt;
set @hs=select FOUND_ROWS();
end;红色部分怎么写让它成为一个返回值?
搞定了,谢谢