Berücksichtigen Sie bei der Arbeit an dem, was Code-Monk geschrieben hat, Folgendes:
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
Gespeicherte Prozedur testen
call uspK(); -- test it, no warnings on edge conditions
Was Sie nicht tun sollten
Man würde nicht finde viel Glück mit dem Folgenden. Wenn Sie das glauben, führen Sie es ein paar Mal aus;
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
weil create temporary table if not exists temp
ist schuppig
Allgemeine Kommentare
Man sollte nicht damit beginnen, gespeicherte Prozeduren zu schreiben, bis man das einfache Thema DELIMITERS einigermaßen fließend beherrscht. Ich habe darüber in einem Abschnitt hier geschrieben als Trennzeichen bezeichnet . Nur in der Hoffnung, Sie vor unnötig verschwendeter Zeit mit so einer einfachen Sache zu bewahren, kann viel Zeit für die Fehlerbehebung verschwendet werden.
Denken Sie auch hier in Ihrer Frage sowie in dieser Referenz daran, dass die Erstellung von Tabellen DDL ist das kann haben einen großen Prozentsatz der Gesamtprofilierung (Leistung). Es verlangsamt einen Prozess im Vergleich zur Verwendung einer bereits vorhandenen Tabelle. Man könnte meinen, der Anruf erfolgt sofort, ist es aber nicht. Aus Leistungsgründen ist daher die Verwendung einer bereits vorhandenen Tabelle mit Einser-Ergebnissen, die in ihre eigene segmentierte Zeilen-ID eingefügt werden, viel schneller als der dauerhafte DDL-Overhead.