lavorando su ciò che Code-Monk ha scritto, considera quanto segue:
drop procedure if exists uspK;
DELIMITER $$
create procedure uspK ()
BEGIN
drop temporary table if exists temp; -- could be some other random structure residue
create temporary table temp
SELECT aID, bID
FROM tags
WHERE placeID = "abc" AND tagID = "def";
-- use the temp table somehow
-- ...
-- ...
-- ...
drop temporary table temp; -- otherwise it survives the stored proc call
END
$$ -- signify end of block
DELIMITER ; -- reset to default delimiter
Procedura memorizzata di prova
call uspK(); -- test it, no warnings on edge conditions
Cosa non fare
Uno non trova molta fortuna con quanto segue. Se la pensi così, eseguilo un paio di volte;
drop procedure if exists uspK;
DELIMITER $$
create procedure uspK ()
BEGIN
-- drop temporary table if exists temp;
create temporary table if not exists temp
SELECT aID, bID
FROM tags
WHERE placeID = "abc" AND tagID = "def";
-- use the temp table somehow
-- ...
-- ...
-- ...
-- drop temporary table temp; -- otherwise it survives the stored proc call
END
$$ -- signify end of block
DELIMITER ; -- reset to default delimiter
perché create temporary table if not exists temp
è friabile
Commenti generali
Non si dovrebbe intraprendere la scrittura di processi memorizzati fino a quando non si è in qualche modo fluenti sul semplice argomento dei DELIMITERS. Ne ho parlato in una sezione qui chiamato Delimitatori . Sperando solo di evitare inutili perdite di tempo su una cosa così semplice, che può far perdere un sacco di tempo per il debug.
Inoltre, qui nella tua domanda, così come in quel riferimento, tieni presente che la creazione di tabelle è DDL che può hanno una grande percentuale della profilazione complessiva (prestazioni). Rallenta un processo rispetto all'utilizzo di una tabella preesistente. Si potrebbe pensare che la chiamata sia istantanea, ma non lo è. In quanto tale, per le prestazioni, l'utilizzo di una tabella preesistente con i risultati inseriti nel proprio ID riga segmentato è molto più veloce del sovraccarico DDL.