資料庫之建立表前的判斷處理

wangzh3發表於2007-04-10

對於sybase/sql server就比較簡單,可以使用

if exists(select 1 from sysobjects where id=object_id("表的名稱") and type="U")

drop table "表的名稱"

go

---然後建立即可。

但是對於oracle就沒有對應的語法。如果直接drop掉,則因為對應的對應沒有存在,會提示錯誤資訊,對於新手或者用服來說,發現錯誤的時候就會提出疑問。所以有如下簡單的辦法來處理。原理很簡單,使用user_objects資料字典和動態sql語句。

[@more@]

create or replace procedure proc_dropifexists(
p_i_tablename in varchar2 -----表名字
) is
v_count number(10);
begin
----判斷當前使用者下是否有對應的表
select count(*)
into v_count
from user_objects
where object_name = upper(p_i_tablename);

if v_count > 0 then
----如果存在則使用動態sql drop掉該表
execute immediate 'drop table ' || p_i_tablename;
end if;
end proc_dropifexists;

----呼叫辦法demo
exec proc_dropifexists('a');

對於儲存過程和觸發器,sybase的處理辦法和針對表的處理辦法類似。oracle就簡單了,直接create or replace ,意即存在就刪除重建,不存在就建立,簡單明瞭。

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

相關文章