假设A表有3个字段,ID, DATA1,DATA2
成都创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都做网站、成都网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的振安网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
简单的话可以不使用存储过程,比如:
select * form A where ID in (select ID from A where DATA1 between 0 and 100)
如果你的应用比较复杂,在嵌套中还有复杂的运算,存储过程可以如下例子:
CREATE PROCEDURE test(in_start int,in_end int)
BEGIN
DECLARE ids TEXT;
select GROUP_CONCAT(ID) into ids from A where DATA1 between in_start and in_end;
select * from A where FIND_IN_SET(ID,ids) 0;
END
注: in_start, in_end是DATA1的筛选范围。 后面一个select直接返回一个表
直接用SQL和使用存储过程各有利弊,存储过程在你使用大量查询及SQL运算的时候效率很高,而且存储过程一旦写入数据库会被自动编译运行速度比较快,而SQL是每次执行都需要被编译一次的。但是存储过程的调试比较麻烦,不像你使用编程语言和SQL的时候可以单步调试。而且如果没有熟练掌握存储过程的效率优化情况下,使用存储过程可能比使用SQL更慢。
MySQL 存储过程中,使用游标查询,返回的是结果集时,如何查看调用存储过程输出结果呢?
解决方案:存储过程不返回数据,但它能创建和填充另一个表。所以在存储过程运行中创建临时表。该临时表将保存存储过程中生成的结果集,在遍历游标时,用insert保存每条数据到临时表中。后续调用时可以用select语句查询临时表中的存储过程运行结果。
以下有 三种方式 使用游标创建一个存储过程,统计某一部门下的员工信息
方法一:Loop循环
调用存储过程:
方法二:While 循环
调用存储过程:
方法三:REPEAT 循环
调用存储过程:
上述三种实现方法在测试过程中遇到下述问题。
调用存储过程查询临时表输出结果时,会发现多循环了一次,像这样:
解决方法:
在遍历游标查询结果时,先判断游标的结束标志(done) 是否是为1,如果不是1,则向临时表中插入数据。
主库和从库都直接可以查询。
MySQL存储过程-循环遍历查询到的结果集:根据MySQL的语法创建存储过程,要注意的是如果循环遍历查询到的结果集,取出结果集中的数据做操作。
SELECT * FROM mysql.proc
WHERE type = 'PROCEDURE'
AND specific_name = 'P_UserBetDayDetail'
AND Body LIKE '%Report_UserBetDayDetail%';
mysql.proc:表示查询的目标表;
type = 'PROCEDURE':表示查询的是存储过程;
specific_name = 'P_UserBetDayDetail' :表示查询的具体存储过程名称;
Body LIKE '%Report_UserBetDayDetail%':表示存储过程内容中包含的表。