trabajando en lo que escribió Code-Monk, considere lo siguiente:
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
Procedimiento almacenado de prueba
call uspK(); -- test it, no warnings on edge conditions
Qué no hacer
Uno no encontrar mucha suerte con lo siguiente. Si crees que sí, ejecútalo unas cuantas veces;
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
porque create temporary table if not exists temp
es raro
Comentarios generales
Uno no debe embarcarse en escribir procesos almacenados hasta que tenga algo de fluidez en el tema simple de DELIMITADORES. Escribí sobre ellos en una sección aquí llamados Delimitadores . Solo con la esperanza de evitar una pérdida de tiempo innecesaria en algo tan simple, que puede desperdiciar mucho tiempo de depuración.
Además, aquí en su pregunta, así como en esa referencia, tenga en cuenta que la creación de tablas es DDL que puede tienen un gran porcentaje del perfil general (rendimiento). Ralentiza un proceso en comparación con el uso de una tabla preexistente. Uno podría pensar que la llamada es instantánea, pero no lo es. Como tal, para el rendimiento, usar una tabla preexistente con los resultados colocados en su propio ID de fila segmentado es mucho más rápido que soportar la sobrecarga de DDL.