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語句做了一次包裹,才會避開編譯檢查。