わかりました。自分で解決しました。ここにストアドプロシージャがあります:)
BEGIN
DECLARE done BOOLEAN DEFAULT FALSE;
DECLARE truncatestmnt TEXT; -- this is where the truncate statement will be retrieved from cursor
-- This is the magic query that will bring all the table names from the database
DECLARE c1 CURSOR FOR SELECT Concat('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA = "@DatabaseName";
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = TRUE;
OPEN c1;
c1_loop: LOOP
FETCH c1 INTO truncatestmnt;
IF `done` THEN LEAVE c1_loop; END IF;
SET @x = truncatestmnt;
PREPARE stm1 FROM @x;
EXECUTE stm1;
END LOOP c1_loop;
CLOSE c1;
END
指定されたデータベースからすべてのテーブルを呼び出すようにしています。これは、指定されたデータベース内のテーブルに従うパターンがない場合に役立ちます。
したがって、DECLARE c1 CURSOR FOR SELECT Concat('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA = "@DatabaseName";
を呼び出すことによって 結果をカーソルに保存すると、すべてのTRUNCATE TABLE x
をフェッチできます。 指定されたデータベース内の「n」個のテーブルによって生成されたステートメント。カーソル内の各ステートメントを準備して実行するだけで、指定されたデータベース内のすべてのテーブルが切り捨てられます。
これが他の誰かにも役立つことを願っています:)
アレックス