werken aan wat Code-Monk schreef, overweeg dan het volgende:
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
Test opgeslagen procedure
call uspK(); -- test it, no warnings on edge conditions
Wat niet te doen
Men zou niet veel succes met het volgende. Als je denkt van wel, voer het dan een paar keer uit;
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
omdat create temporary table if not exists temp
is onbetrouwbaar
Algemene opmerkingen
Men moet niet beginnen met het schrijven van opgeslagen procedures voordat men enigszins vloeiend is over het eenvoudige onderwerp DELIMITERS. Schreef over hen in een sectie hier genaamd scheidingstekens . In de hoop u te voorkomen dat u onnodige tijd verspilt aan zoiets eenvoudigs, dan kunt u veel tijd verspillen aan het opsporen van fouten.
Houd ook hier in uw vraag, evenals in die verwijzing, in gedachten dat het maken van tabellen DDL is dat kan een groot percentage van de algehele profilering (prestaties) hebben. Het vertraagt een proces in plaats van een reeds bestaande tabel te gebruiken. Je zou kunnen denken dat de oproep onmiddellijk is, maar dat is niet zo. Als zodanig is voor de prestaties het gebruik van een reeds bestaande tabel met de resultaten die in hun eigen gesegmenteerde rowId worden geplaatst veel sneller dan het verdragen van DDL-overhead.