MYSQL 存储过程如何取得一个表的查询结果?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL 存储过程如何取得一个表的查询结果?相关的知识,希望对你有一定的参考价值。

参考技术A 假设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存储过程中如何遍历查询结果然后调用另一个存储过程?

【中文标题】MySQL存储过程中如何遍历查询结果然后调用另一个存储过程?【英文标题】:How to travers query results and then call the other Stored Procedure in MySQL Stored Procedure? 【发布时间】:2015-08-27 21:56:24 【问题描述】:

现在我可以编写单独的存储过程了。

-- get the total query id result
select id from book where bookprice>10;
-- only pass a single id
call sp_refreshbook(id); 

如何将它们合并在一起?现在我想搜索 id 结果,他们在新的 store 存储过程的结果中调用每个 id 中的 sp_refreshbook

【问题讨论】:

告诉我们sp_refreshbook小狗,我们可以创建一个新的sp_refreshbookLooper 【参考方案1】:

我自己用光标解决了这个问题。

open v_result_cur;
repeat
fetch v_result_cur into v_id;
IF NOT v_done THEN
select v_id; 
END IF;
until v_done end repeat;
close v_result_cur;

【讨论】:

以上是关于MYSQL 存储过程如何取得一个表的查询结果?的主要内容,如果未能解决你的问题,请参考以下文章

SQL SERVER里面如何在存储过程里面获取另一个存储过程所返回的表的数据?

SQL SERVER里面如何在存储过程里面获取另一个存储过程所返回的表的数据?

MySQL存储过程中如何遍历查询结果然后调用另一个存储过程?

请教一个mysql 存储过程的问题?

ORACLE数据库 存储过程 中 从几张级联表中查询 出结果集,循环添加到另一张表的某一字段

MYSQL的存储过程如何返回查询到的行数据?