轉至:https://blog.csdn.net/lzh3521/article/details/84405848?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-2.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-2.pc_relevant_aa&utm_relevant_index=5
1.sqlserver數據庫
在sqlserver中,創建表之前判斷表是否存在,如果存在則刪除已有表
----SQL-Server
if exists (select 1
from sysobjects
where id = object_id('EMP')
and type = 'U')
drop table S_Evaluate
go
--CREATE Table: EMP
create table EMP(
Id numeric identity, -- 評估ID
Conclusion text null --結論
constraint PK_S_EMP primary key nonclustered(Id)
)
go
2.ORACLE 數據庫
但是在oracle中卻沒有。如果直接使用drop table那么如果表不存在會報錯,導致后續語句無法運行。因此可以通過一個存儲過來來進行判斷。
主要是查詢all_tables表的TABLE_NAME和OWNER,如果表存在,則執行execute immediate 'drop table TABLE_NAME';
--判斷表是否存在,如果存在則刪除
declare
num number;
begin
select count(1) into num from all_tables where TABLE_NAME = 'EMP' and OWNER='SCOTT';
if num=1 then
execute immediate 'drop table EMP';
end if;
end;
/
--創建表
CREATE TABLE EMP
(EMPNO NUMBER(4) NOT NULL,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7, 2),
COMM NUMBER(7, 2),
DEPTNO NUMBER(2));
3.DB2
現在使用DB2,網上找了很久也沒個好方法,基本上用簡單的sql語句來實現是不大可能的,能找到的方法都是自己寫存儲過程實現
刪除表的如下:
CREATE PROCEDURE ExistsTest(IN TableName varchar(50),OUT iReturn int)
LANGUAGE SQL
P1: BEGIN
DECLARE stmt VARCHAR(200);
IF EXISTS (select * from sysibm.systables where TID <> 0 and name = TableName ) THEN
set stmt ='drop table '|| TableName;
PREPARE s1 FROM stmt;
EXECUTE s1;
set iReturn =0;
else
set iReturn =-1;
END IF;
END P1@
END P1后面的@根據所用編輯工具的不同,默認的結束也不一樣。測試了一下QUEST CENTRAL FOR DB2,默認是分號,如果想用@自己修改工具的配置吧
由於DB2不像sqlserver那樣把所有對象組織到一個sysobjects里,所以想要實現不同的功能就需要修改這個存儲過程,
如:
syscat.procedures 存儲過程
syscat.tables 表
sysibm.tables 表
syscat.views 視圖
sysibm.views 視圖
以上表和視圖的系統視圖在syscat和sysibm里都存在,個人水平不高,不知道是為什么,呵呵,從網上搜到的信息里摘一段出來如下:
數據庫的視圖里有sysibm.tables和syscat.tables,這兩個有什么區別?很多資料上不是說sysibm模式的是基表嗎,怎么在視圖里也有sysibm模式,是干什么用的?gmx平坦軟件園
sysibm.tables的表里面的信息比syscat.tables的少,或者說IBM認為你想知道的信息在sysibm.tables里面已經都可以知道了,這個應該是給用戶使用的。syscat.tables應該是給系統使用的。gmx平坦軟件園