při práci na tom, co napsal Code-Monk, zvažte následující:
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
Testovat uloženou proceduru
call uspK(); -- test it, no warnings on edge conditions
Co nedělat
Člověk by ne najít hodně štěstí s následujícím. Pokud si myslíte, že ano, spusťte jej několikrát;
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
protože create temporary table if not exists temp
je flakey
Obecné komentáře
Člověk by se neměl pouštět do psaní uložených postupů, dokud trochu neovládá jednoduché téma DELIMITERŮ. Napsali o nich v sekci zde nazývané Oddělovače . Jen doufat, že vás to odradí od zbytečného plýtvání časem na tak jednoduché věci, které může ztrácet spoustu času laděním.
Také zde ve vaší otázce, stejně jako v tomto odkazu, mějte na paměti, že vytváření tabulek je DDL které může mají velké procento z celkového profilování (výkonu). Zpomaluje proces oproti použití již existující tabulky. Někdo by si mohl myslet, že hovor je okamžitý, ale není tomu tak. Z důvodu výkonu je použití již existující tabulky s výsledky vloženými do vlastního segmentovaného rowId mnohem rychlejší než trvalé režie DDL.