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

來源:互聯網
上載者:User
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語句做了一次包裹,才會避開編譯檢查。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.