Ich habe eine Stored Procedure in mySQL, die eine Teilmenge von Daten aus einer Tabelle übernimmt und eine Analyse dieser Teilmenge innerhalb einer temporären Tabelle durchführt. Hier ist mein Code:mySQL mehrere temporäre Tabellen erstellen
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
Das funktioniert gut. Das Problem, das ich habe, ist jedoch, dass es sich um eine Multithread-Anwendung handelt, und wenn mehrere Threads dieses gespeicherte Proc aufrufen, beginnen sie, die gleiche temporäre Tabelle zu teilen, was die Stats, die ich zu kompilieren versuche, vermasselt.
Gibt es eine Möglichkeit, entweder einen eindeutigen Tabellennamen auf jeden Aufruf des gespeicherten Proc anzuwenden oder den Bereich der temporären Tabelle auf genau diese Instanz des gespeicherten Proc zu beschränken?
Ich hatte einen ähnlichen Gedanken, aber (für Kurz gesagt) Ich habe nur eine der Statistikberechnungen gezeigt - es sind ungefähr 14 von ihnen. Also, kopiere die relevanten Zeilen in eine temporäre Tabelle und berechne dann die 14 Stats, die mehr Sinn ergeben. Ich werde versuchen, verschiedene Verbindungen zu verwenden. – John
Ich habe gerade versucht, Ihre Lösung zu sehen, wie es funktioniert, aber ich bekam das gleiche Problem. Für das innere SELECT habe ich AS T hinzugefügt und dann zusätzliche Analysen durchgeführt. Ich habe jedoch die falsche Anzahl von Zeilen zurückgegeben. Wenn ich ein 'AS T' mit dem inneren SELECT verwende, ist das 'T' für alle Threads sichtbar? – John
Abschließender Kommentar - wenn ich der Verbindungszeichenfolge "POOLING = False" hinzufüge, bedeutet das, dass ich von jedem Thread eine andere Verbindung bekomme? – John