oracle创建表之前判断表是不是存在,如果存在则删除已有表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle创建表之前判断表是不是存在,如果存在则删除已有表相关的知识,希望对你有一定的参考价值。

mysql 创建表之前判断表是否存在,如果存在则删除已有表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

DROP TABLE IF EXISTS sys_area;

CREATE TABLE sys_area
(
id int NOT NULL AUTO_INCREMENT COMMENT \'编号\',
parent_id varchar(64) NOT NULL COMMENT \'父级编号\',
parent_ids varchar(2000) NOT NULL COMMENT \'所有父级编号\',
name varchar(100) NOT NULL COMMENT \'名称\',
sort decimal(10,0) NOT NULL COMMENT \'排序\',
code varchar(100) COMMENT \'区域编码\',
type char(1) COMMENT \'区域类型\',
create_by varchar(64) NOT NULL COMMENT \'创建者\',
create_date datetime NOT NULL COMMENT \'创建时间\',
update_by varchar(64) NOT NULL COMMENT \'更新者\',
update_date datetime NOT NULL COMMENT \'更新时间\',
remarks varchar(255) COMMENT \'备注信息\',
del_flag char(1) DEFAULT \'0\' NOT NULL COMMENT \'删除标记\',
PRIMARY KEY (id)
) COMMENT = \'区域表\';

MySql 自增长 AUTO_INCREMENT
Oracle 创建表之前判断表是否存在,如果存在则删除已有表

declare
num number;
begin
select count(1) into num from user_tables where table_name = upper(\'sys_area\') ;
if num > 0 then
execute immediate \'drop table sys_area\' ;
end if;
end;

-- 区域表
CREATE TABLE sys_area
(
id Number(4) NOT NULL,
parent_id varchar2(64) NOT NULL,
parent_ids varchar2(2000) NOT NULL,
name nvarchar2(100) NOT NULL,
sort number(10,0) NOT NULL,
code varchar2(100),
type char(1),
create_by varchar2(64) NOT NULL,
create_date timestamp NOT NULL,
update_by varchar2(64) NOT NULL,
update_date timestamp NOT NULL,
remarks nvarchar2(255),
del_flag char(1) DEFAULT \'0\' NOT NULL,
PRIMARY KEY (id)
);

Oracle 定义主键 自增长,需要定义一个序列
create sequence seq_sys_area
minvalue 1 --最小值
nomaxvalue --不设置最大值
start with 1 --从1开始计数
increment by 1 --每次加1个
nocycle --一直累加,不循环
nocache; --不建缓冲区

以上代码完成了一个序列(sequence)的建立过程,名称为SEQ_TEST,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,如果你设置了最大值那么你可以用cycle 会使seq到最大之后循环.对于nocache顺便说一下如果你给出了cache值那么系统将自动读取你的cache值大小个seq,这样在反复操作时会加快运行速度,但如果遭遇意外情况如当机了或oracle死了,则下次取出的seq值将和上次的不连贯.(如果连不连贯无所谓建议用cache,因为时间就是金钱呀!) 
seq_sys_area.nextval 作为主键插入值
参考技术A declare
num number;
begin
select count(1) into num from user_tables where table_name = upper('sys_area') ;
if num > 0 then
execute immediate 'drop table sys_area' ;
end if;
end;

-- 区域表
CREATE TABLE sys_area
(
id Number(4) NOT NULL,
parent_id varchar2(64) NOT NULL,
parent_ids varchar2(2000) NOT NULL,
name nvarchar2(100) NOT NULL,
sort number(10,0) NOT NULL,
code varchar2(100),
type char(1),
create_by varchar2(64) NOT NULL,
create_date timestamp NOT NULL,
update_by varchar2(64) NOT NULL,
update_date timestamp NOT NULL,
remarks nvarchar2(255),
del_flag char(1) DEFAULT '0' NOT NULL,
PRIMARY KEY (id)
);本回答被提问者采纳

Sql Server 判断表是否存在方法

  在创建表之前,通常需要先判断该表是否已经存在,如果存在则不需要创建;有时候删除表之前也需要先行判断是否存在,否则会报错。

  判断方法大致有以下两种:

  方法一:  

if Exists(select top 1 1 from sysObjects where Id=OBJECT_ID(NLE_User) and xtype=U)
       print 存在
else 
    print 不存在

  方法二:

if OBJECT_ID(NLE_User,NU) is not null
    print 存在
else 
    print 不存在

  其中两种方法都使用到了sysObjects这张系统表,该表保存了所有对象信息,既然是所有对象,自然包括表的信息,其中xtype为U表示为用户表。

 

  判断临时表是否存在方法如下:  

if OBJECT_ID(Ntempdb..#TempTable,NU) is not null
    print 存在
else 
    print 不存在

if exists (select * from tempdb.dbo.sysobjects where id = object_id(Ntempdb..#TempTable) and type=U)
   print 存在 
else
   print 不存在

  临时表本身也是一张表,所以判断存在的方法和普通表相同,只不过需要增加tempdb..指明为临时表。

以上是关于oracle创建表之前判断表是不是存在,如果存在则删除已有表的主要内容,如果未能解决你的问题,请参考以下文章

oracle创建表之前判断表是不是存在,如果存在则删除已有表

Oracle删除表字段之前判断表字段是否存在

c#里面怎么判断数据库是不是存在

如果 Oracle 中不存在表,则创建一个表(使用 Java)

Sql Server 判断表是否存在方法

Oracle如何判断表存在,若存在则进行删除