日期:2014-05-16  浏览次数:20537 次

mysql 存储过程嵌套调用,在调用者中对被调用者返回的记录集进行处理,问题是如何再调用者中获得被调用者的记录集呢?临时表会不会速度太慢呢?
mysql 存储过程嵌套调用,在调用者中对被调用者返回的记录集进行处理,问题是如何再调用者中获得被调用者的记录集呢?临时表会不会速度太慢呢?

------解决方案--------------------
在MYSQL中只有用临时表的方法来处理,如果记录不多,速度不会太慢
------解决方案--------------------


通过存储过程再调用存储过程,没有办法直接返回记录集或游标。只能通过临时表。具体速度没有测试过,MyIASM理论上速度不会太慢。但要看具体情况。

[color=#FFFFFF][/color]
------解决方案--------------------
如果记录多的话,没有办法,速度慢一些,在查询字段上建立索引试试
------解决方案--------------------


没关系,临时表是session 级的。也就是仅在一个连接内可见。不同连接进去创建的临时表是不会相互影响的。当连接断开时,这个临时表也就被自动删除了。
------解决方案--------------------
楼上说的有理,继续关注
------解决方案--------------------


你用的WEB调用,所以每次都会产生一个新的connection. 所有没关系。直接用就可以了。不会互相干扰的。除非你在一个联接内要调两次这个存储过程。如果这样的话,你应该在存储过程的最后返回时drop 掉这个表
------解决方案--------------------
不删除就要TRUNCATE,删除要快一些

将参数带上
CREATE TABLE #TMP(字段列表)
as SELECT * FROM TEST_TABLE LIMI cs1,cs2
一个SP就可以解决了嘛
------解决方案--------------------


 CREATE TABLE #TMP 你这不是临时表啊。

CREATE TEMPORARY TABLE #TMP
------解决方案--------------------
临时表相对于工作表而言,用
CREATE TABLE #TMP 
OR
CREATE TEMPORARY TABLE #TMP
均可
------解决方案--------------------
DELIMITER $$

CREATE PROCEDURE SW(in cs1 int,in cs2 int)
BEGIN
DROP TEMPORARy TABLE IF EXISTS TMP;
set @ff=concat('CREATE TEMPORARy TABLE TMP',
' as SELECT * FROM TEST_TABLE LIMIt ',cs1,',',cs2);
select @ff;
prepare dd from @ff;
execute dd;
SELECT * FROM TMP a LEFT JOIN TEST_TABLE_A b on a.id=b.id;
DROP TEMPORARy TABLE TMP;
END$$

DELIMITER ;