oracle如果,Oracle:如果表存在

我正在为Oracle数据库编写一些迁移脚本,并且希望Oracle有类似MySQL的IF EXISTS结构。

具体来说,每当我想在MySQL中删除表时,我都会这样做

DROP TABLE IF EXISTS `table_name`;

这样,如果表不存在, DROP不会产生错误,脚本可以继续。

Oracle是否有类似的机制? 我意识到我可以使用以下查询来检查表是否存在

SELECT * FROM dba_tables where table_name = 'table_name';

但是将DROP与DROP绑在一起的语法正在逃避我。

#1楼

只是想发布一个完整的代码来创建一个表,如果已经存在使用Jeffrey的代码就放弃它(对他而言,不是我!)。

BEGIN

BEGIN

EXECUTE IMMEDIATE 'DROP TABLE tablename';

EXCEPTION

WHEN OTHERS THEN

IF SQLCODE != -942 THEN

RAISE;

END IF;

END;

EXECUTE IMMEDIATE 'CREATE TABLE tablename AS SELECT * FROM sourcetable WHERE 1=0';

END;

#2楼

我更喜欢指定表和架构所有者。

注意区分大小写。 (参见下面的“上部”条款)。

我扔了几个不同的对象,以表明可以在TABLEs之外的地方使用。

.............

declare

v_counter int;

begin

select count(*) into v_counter from dba_users where upper(username)=upper('UserSchema01');

if v_counter > 0 then

execute immediate 'DROP USER UserSchema01 CASCADE';

end if;

end;

/

CREATE USER UserSchema01 IDENTIFIED BY pa$$word

DEFAULT TABLESPACE users

TEMPORARY TABLESPACE temp

QUOTA UNLIMITED ON users;

grant create session to UserSchema01;

和一个TABLE示例:

declare

v_counter int;

begin

select count(*) into v_counter from all_tables where upper(TABLE_NAME)=upper('ORDERS') and upper(OWNER)=upper('UserSchema01');

if v_counter > 0 then

execute immediate 'DROP TABLE UserSchema01.ORDERS';

end if;

end;

/

#3楼

可悲的是,如果存在则没有丢弃,或者如果不存在则不会创建

您可以编写一个plsql脚本来包含逻辑。

我对Oracle语法不太了解,但我认为@ Erich的脚本会是这样的。

declare

cant integer

begin

select into cant count(*) from dba_tables where table_name='Table_name';

if count>0 then

BEGIN

DROP TABLE tableName;

END IF;

END;

#4楼

在oracle中没有'DROP TABLE IF EXISTS',你必须做select语句。

试试这个(我没有使用oracle语法,所以如果我的变量是ify,请原谅我):

declare @count int

select @count=count(*) from all_tables where table_name='Table_name';

if @count>0

BEGIN

DROP TABLE tableName;

END

#5楼

declare

c int;

begin

select count(*) into c from user_tables where table_name = upper('table_name');

if c = 1 then

execute immediate 'drop table table_name';

end if;

end;

这是用于检查当前模式中的表是否存在。 要检查给定表是否已存在于不同的模式中,您必须使用all_tables而不是user_tables并添加条件all_tables.owner = upper('schema_name')

来源:oschina

链接:https://my.oschina.net/u/3797416/blog/3207852

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值