【发布时间】:2017-04-09 20:10:28
【问题描述】:
我在 mySQL 中有一个存储过程,它从表中获取数据子集并在临时表中对该子集执行一些分析。这是我的代码:
CREATE PROCEDURE GetPortfolioStats
(
InIdx_i INT,
InStart_i INT,
InEnd_i INT
)
BEGIN
DECLARE myLimit INT;
DECLARE myOffset INT;
SET myLimit = InEnd_i - InStart_i + 1;
SET myOffset = InStart_i - 1;
CREATE TEMPORARY TABLE IF NOT EXISTS myTmpTable AS (SELECT * FROM Leases WHERE Portfolio_i = InIdx_i ORDER BY Index_i LIMIT myLimit OFFSET myOffset);
SET @Additive_i := (SELECT COUNT(Index_i) FROM myTmpTable WHERE ReviewType_vc = 'Additive');
DROP TABLE myTmpTable;
SELECT @Additive_i;
END; GO
这很好用。但是,我遇到的问题是,这是一个多线程应用程序,当多个线程调用此存储过程时,它们开始共享同一个临时表,这会弄乱我正在尝试编译的 Stats。
有没有办法对存储过程的每次调用应用唯一的表名,或者将临时表的范围限制为存储过程的那个实例?
【问题讨论】:
标签: mysql multithreading temp-tables