db2刪除已經儲存的表儲存過程

guyuanli發表於2012-09-14
db2刪除已經儲存的表儲存過程[@more@]

drop procedure DROP_IF_EXISTS;
create procedure DROP_IF_EXISTS(in tabschame varchar(100),in tabname varchar(100))
--儲存過程詳細說明--
--儲存過程名: DROP_IF_EXISTS--
--儲存過程建立日期:2012/8/15--
--儲存過程建立人:顧原力--
--目的:查詢DB2表是否存在,如果存在就刪除--
--輸入引數:tabschame tabname--
--輸出引數:--
--返回值:--
begin
--定義變數--
declare spname varchar(20) default 'DROP_IF_EXISTS';--定義儲存過程的名稱--
declare v_i integer DEFAULT 0;--定義判斷變數--
declare t_sql varchar(1000);--存放拼寫刪除SQL--
declare v_tabname varchar(100); --存放完整表名--
declare tname varchar(100); --存放表名--
DECLARE SQLCODE integer DEFAULT 0;--編碼程式碼初始值為0--
declare returncode integer;--儲存發生錯誤的錯誤號--
declare returnmsg varchar(500);--儲存發生錯誤時的錯誤資訊--

--宣告異常--
declare exit handler for not found--sqlcode值為100的異常,這個異常通常在SELECT沒有返回行的時候出現--
begin
set returncode=sqlcode;--把錯誤號賦給returncode--
insert into LOADTMSG values(returncode);--記錄錯誤日誌插入表中--
commit;
end;

declare exit handler for sqlwarning--標識導致警告異常或者導致+100以外的SQLCODE正值的異常--
begin
set returncode=sqlcode;
insert into LOADTMSG values(returncode);
commit;
end;

declare exit handler for sqlexception--標識導致SQLCODE值為負的異常--
begin
set returncode=sqlcode;
insert into LOADTMSG values(returncode);
commit;
end;

set v_tabname = tabschame||'.'||tabname;
set tname = tabname;

--判斷資料庫中有無此表,如果有此表就刪除--
select count(*) into v_i from syscat.tables where TYPE='T' and TABNAME=upper(tname);

if v_i = 1 then
set t_sql='DROP TABLE '||v_tabname;
execute immediate t_sql;
commit;
end if;
commit;
end;

call DROP_IF_EXISTS('DB2inst1','LOADT3');--呼叫儲存過程--

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7490392/viewspace-1059427/,如需轉載,請註明出處,否則將追究法律責任。

相關文章