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