Code-Monkが書いたものに取り組んでいる場合は、次のことを考慮してください。
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
テストストアドプロシージャ
call uspK(); -- test it, no warnings on edge conditions
すべきでないこと
しない 以下で多くの幸運を見つけてください。そう思う場合は、数回実行してください;
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
create temporary table if not exists temp
薄っぺらです
一般的なコメント
DELIMITERSの単純なトピックにある程度堪能になるまで、ストアドプロシージャの作成に着手するべきではありません。 こちら のセクションでそれらについて書きました 区切り文字と呼ばれます 。デバッグに多くの時間を浪費する可能性があるよりも、このような単純なことに不必要な無駄な時間を費やすことを望んでいます。
また、ここでの質問とそのリファレンスでは、テーブルの作成は DDLであることに注意してください。 できる 全体的なプロファイリング(パフォーマンス)の大部分を占めています。既存のテーブルを使用する場合と比較して、procの速度が低下します。呼び出しは瞬時に行われると思うかもしれませんが、そうではありません。そのため、パフォーマンスのために、結果が独自のセグメント化されたrowIdに配置された既存のテーブルを使用すると、DDLオーバーヘッドに耐えるよりもはるかに高速になります。