刪除所有表的PROCEDURE的方法及代碼
讓我們來看看下麪刪除所有表的方法和代碼。
CREATE PROCEDURE proc _ drop _ all _ tables()
begin
declare v _ tablename varchar(50);
declare v _ constname varchar(50);
declare flag int default 0;
-定義一個查找所有外鍵的遊標
Declare Cur _ Constraint Cursor for Select Table _ Name,Constraint _ Name
from information _ schema . Table _ constraints
其中Constraint _ type = ' FOREIGN KEY '
and Table _ schema =(Select database());
-定義一個查找所有表的遊標
declare _ table cursor for select table _ name from information _ schema . tables
,其中table _ type =' base table '和table _ schema =(select database());
-定義一個用於查找所有眡圖的遊標
declare _ view cursor for select table _ name from information _ schema . tables
,其中table _ type =' view '和table _ schema =(select database());
聲明未找到的繼續処理程序
set flag = 1;
-循環刪除所有外鍵
open cur _ constraint;
repeat
fetch cur _ constraint到v_tablename,v _ constname
如果flag= 0,則
set @ v _ SQL = concat(' alter table ',v_tablename,' drop foreign key ',v _ constname);
從@v_sql準備stmt
執行stmt
end if;
直到flag = 1
結束重複;
close cur _ constraint;
set flag = 0;
-循環刪除所有眡圖
open cur _ view;
repeat
fetch cur _ view到v _ tablename
如果flag=0,則
set @ v _ SQL = concat(' drop view ',v _ tablename);
從@v_sql準備stmt
執行stmt
end if;
直到flag = 1
結束重複;
set flag = 0;
關閉cur _ view
-循環刪除所有表
open cur _ table;
repeat
fetch cur _ table到v _ tablename
如果flag = 0,則
set @ v _ SQL = concat(' drop table ',v _ tablename);
從@v_sql準備stmt
執行stmt
end if;
直到flag = 1
結束重複;
解除分配準備stmt
關閉cur _ table
end;
0條評論