天天看點

oracle(PL/SQL)表操作:建立表時檢查資料庫是否存在該表,若存在删除再建立

Technorati 标簽: 

在PL/SQL中建立表之前判斷表是否存在

如果有就删除表的執行語句的書寫

  由于才開始使用PL/SQL來進行Oracle的用戶端操作,由于以前使用sql 2005 來執行“建立表之前判斷表是否存在 如果有就删除表,再建立”的操作語句非常簡單:

1:  if exists (

2:  select * from sysobjects 

3:  where id = OBJECT_ID('STUDENTS]') and OBJECTPROPERTY(id, 'IsUserTable') = 1) 

4:  DROP TABLE [STUDENTS]

然而令我非常郁悶的是,用同樣的方法在PL/SQL裡卻不能運作,提示編譯錯誤。

後來去網上查了相關的文章之後自己寫了如下方法實作:

 1:  declare 

 2:    cnt number;

 3:  begin

 4:    ---查詢要建立的表是否存在

 5:    select count(*)into cnt from user_tables where table_name='STUDENTS'; 

 6:    

 7:    ---如果存在則删除該表

 8:    if cnt>0 then

 9:     execute immediate 'drop table STUDENTS';

10:     dbms_output.put_line('表存在,删除成功!');

11:    end if;

12:    ---删除之後再建立該表

13:    execute immediate 'CREATE TABLE STUDENTS

14:      ( 

15:      SNO NUMERIC(6, 0) NOT NULL,

16:      SNAME CHAR (8) NOT NULL ,

17:      AGE  NUMERIC(3,0) ,

18:      SEX  CHAR(2) ,

19:      BPLACE CHAR(20) ,

20:      PRIMARY KEY(SNO) 

21:      )

22:      tablespace Users' ;

23:  end; 

對比之後,大家不難發現,PL/SQL是把sql語句做了一次包裹,才會避開編譯檢查。