2011-02-04 9 views
0

私は、現在のデータベースに一部テーブルの内容を消去する簡単なストアドプロシージャを記述しようとしています - 私はINFORMATION_SCHEMA内のテーブルのリストに対してプレフィックスを照合することによって、これをやっている:ストアドプロシージャ内で現在のデータベースを識別する方法は?

delimiter $$ 
create procedure local_flush_cache(db varchar(255)) 
begin 

select @str_sql:=concat('delete from ',group_concat(table_name)) 
from information_schema.tables 
where table_schema=db and table_name like 'cache_%'; 

prepare stmt from @str_sql; 

execute stmt; 

drop prepare stmt; 

end$$ 
delimiter ; 

私は、dbパラメータを削除し、現在アクティブなデータベース上で機能するようにしたいと考えています。

データベースがまだ選択されていないことを認識してエラーを出力する必要があると思います(すべてのデータベースのすべてのキャッシュテーブルを誤ってフラッシュしないようにする)。

答えて

4

手順がデータベースに関連付けられていることを考慮して、CALL db.proc()を実行しない限り、現在の呼び出しが呼び出されます。あなたが本当にしたい場合は

しかし、あなたは、the DATABASE() functionを1にすることができます選択:

where table_schema=database() and table_name like 'cache_%'; 
+0

感謝を - 今私は私が構築だクエリで私の構文エラーの修正に取り組んで取得することができます。) – HorusKol

関連する問題