注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天朝布衣田中码农参上

苦逼码农的点点滴滴,请多多指教!

 
 
 

日志

 
 
 
 

Oracle判断表,字段,序列是否存在  

2016-09-15 10:14:59|  分类: Oracle |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
在处理一些Oracle升级SQL脚本时,在执行之前可能需要判断表,字段是否存在。但Oracle不象在Sqlserver中,有if exit()这样的语句,也不同Mysql有CREATE TABLE  IF NOT EXIST… SELECT这种语句。这样的话,在执行建表语句时,可能就需要先行判断下表是否存在。当然为了安全,您也可以在判断表存在之后,先行将原表做下备份。

DECLARE
ifexist number;
BEGIN
--这里判断表是否存在,注意下这里的表名必须转成大写
SELECT count(1) INTO ifexist FROM ALL_TABLES WHERE TABLE_NAME = upper('ARTICLE_593668') AND OWNER='WEB_593668';
IF ifexist=1 THEN
--这里是直接删除表,您可以这里先对原表做下备份
-- execute immediate 'ALTER TABLE ARTICLE_593668 RENAME TO ARTICLE_593668_BAK';
execute immediate 'DROP TABLE ARTICLE_593668';

END IF;
END;
/
--创建表
CREATE ARTICLE_593668
(ID NUMBER(4) NOT NULL,
TITLE VARCHAR2(10),
CONTENT VARCHAR2(4000));

可以将上述代码加载到每一个create table前面,以免出错。但有些场合下可能还需要判断字段是否存在,比如要增加,修改或删除一个表字段时。

DECLARE
ifexist number;
BEGIN
--这里判断表字段是否存在,如果您怕万一的话,还可以先加一个表判断
SELECT count(1) INTO ifexist FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = upper('ARTICLE_593668') AND COLUMN_NAME=upper('CONTENT');
IF ifexist=1 THEN
--如果表字段存在,那么要如何处理,这里举例将原来的表字段改名备份
execute immediate 'ALTER TABLE ARTICLE_593668 RENAME COLUMN CONTENT TO CONTENT_BAK';
END IF;
END;
/
--增加表字段
ALTER TABLE ARTICLE_593668
ADD (CONTENT VARCHAR2(4000) default '' NOT NULL);

除表或字段之外,还有序列在创建之前也是必须判断的。

DECLARE
ifexist number;
BEGIN
--这里判断序列是否存在,这里请同样注意下大小写的问题
SELECT count(1) INTO ifexist FROM USER_SEQUENCES WHERE SEQUENCE_NAME = upper('SEQ_593668');
IF ifexist=1 THEN
--如果序列存在,这里将原来的序列删除
execute immediate 'DROP SEQUENCE SEQ_593668';
END IF;
END;
/
--增加序列
CREATE SEQUENCE SEQ_593668
MINVALUE 1
MAXVALUE 99999999
START WITH 1
INCREMENT BY 1
NOCACHE
ORDER;

那可能有人会问,还有视图,存储过程,包呢,这几个其实就不用判断了,直接用create or replace就可以了。


  评论这张
 
阅读(1)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017