在编写程序时,数据库结构会经常变化,所以经常需要编写一些数据库脚本,编写完成后需发往现场执行,如果已经存在或者重复执行,有些脚本会报错,所以需要判断其是否存在,现在我就把经常用到的一些判断方法和大家分享下:

一.判断Oracle表是否存在的方法

declare tableExistedCount number;   --声明变量存储要查询的表是否存在beginselect count(1) into tableExistedCount  from user_tables t where t.table_name = upper('Test'); --从系统表中查询当表是否存在if tableExistedCount  = 0 then --如果不存在,使用快速执行语句创建新表execute immediate'create table Test --创建测试表(ID number not null,Name = varchar2(20) not null)';end if;end;

二.判断Oracle表中的列是否存在的方法

declare columnExistedCount number;   --声明变量存储要查询的表中的列是否存在
begin --从系统表中查询表中的列是否存在select count(1) into columnExistedCount from user_tab_columns t where t.table_name = upper('Test')  and t.column_name = upper('Age');     --如果不存在,使用快速执行语句添加Age列if columnExistedCount = 0 then execute immediate'alter table Test add age number not null';end if;
end;

我们需要在删除字段前先判断该字段是否存在,若存在则删除,否则会报错

DECLAREnum NUMBER;
BEGINSELECT COUNT(1)INTO numfrom colswhere table_name = upper('tableName')and column_name = upper('columnName');IF num > 0 THENexecute immediate 'alter table tableName drop column columnName';END IF;
END;

我们需要在添加字段前先判断该字段是否存在,若不存在则添加,否则会报错

DECLAREnum NUMBER;
BEGINSELECT COUNT(1)INTO numfrom colswhere table_name = upper('tableName')and column_name = upper('columnName');IF num > 0 THENexecute immediate 'alter table tableName drop column columnName';END IF;
END;

三.判断Oracle表是否存在主键的方法

declare primaryKeyExistedCount number;   --声明变量存储要查询的表中的列是否存在
begin --从系统表中查询表是否存在主键(因一个表只可能有一个主键,所以只需判断约束类型即可)select count(1) into primaryKeyExistedCount from user_constraints t where t.table_name = upper('Test') and t.constraint_type = 'P';     --如果不存在,使用快速执行语句添加主键约束if primaryKeyExistedCount  = 0 then execute immediate'alter table Test add constraint PK_Test_ID primary key(id)';end if;
end;

四.判断Oracle表是否存在外键的方法

declare foreignKeyExistedCount number;   --声明变量存储要查询的表中的列是否存在
begin --从系统表中查询表是否存在主键(因一个表只可能有一个主键,所以只需判断约束类型即可)select count(1) into foreignKeyExistedCount from user_constraints t where t.table_name = upper('Test') and t.constraint_type = 'R' and t.constraint_name = '外键约束名称';     --如果不存在,使用快速执行语句添加主键约束if foreignKeyExistedCount = 0 then execute immediate'alter table Test add constraint 外键约束名称 foreign key references 外键引用表(列)';end if;
end;

Oracle判断表、列、主键是否存在的方法相关推荐

  1. 怎么查看oracle数据库表的主键,Oracle中查看所有的表,用户表,列名,主键,外键...

    在Oracle中查看所有的表: select * from tab/dba_tables/dba_objects/cat; 看用户建立的表 : select table_name from user_ ...

  2. Oracle heap 表的主键 dump 分析

    1. 创建heap 表:create table t1 (id char(10) primary key,a1 char(10),a2 char(10),a3 char(10)); SQL> s ...

  3. oracle 创建表定义主键,Oracle 学习----:创建表(主键自增)

    一.创建表 create table testTable ( Id numbere, name varchar2(100), age number, createTime date, primary ...

  4. oracle设置表的主键和外键,Oracle中给表添加主键、外键

    1.创建表的同时创建主键约束 (1)无命名 create table student ( studentid int primary key not null, studentname varchar ...

  5. oracle查询某表是否存在,oracle判断表中某记录是否存在的方法

    很多人喜欢用这样的方法来判断是否存在记录: select count(*) into t_count from t where condition; if t_count> 0 then ... ...

  6. oracle表违反主键约束,主键/约束/事务/表关系 Oracle

    1:创建一个主键 --创建一个表,有主键 create table studs( id varchar(32) primary key, name varchar(30) ); --主键也是数据库的对 ...

  7. oracle查询一张表的主键,Oracle查询表主键、外键

    Oracle查询表主键.外键 1. 查找表的所有索引(包括索引名,类型,构成列) select t.*,i.index_type from user_ind_columns t,user_indexe ...

  8. oracle中设置表的主键字段为自增序列(实例)

    oracle中设置表的主键字段为自增序列(实例) 1.首先创建一个表(如日志表) //删除库表中存在的日志表 drop table S_LOG_INFO cascade constraints; // ...

  9. oracle 如何获取表的主键列名,如何获取表的所有列名

    获取表的主键列名 SQL  select   *   from   user_cons_columns      where   constraint_name   =   (select   con ...

  10. oracle怎么查看表的唯一约束,查询(看)表的主键、外键、唯一性约束和索引

    --查找表的所索引(包括索引名,类型,构成列: SELECT T.*, I.INDEX_TYPE FROM USER_IND_COLUMNS T, USER_INDEXES I WHERE T.IND ...

最新文章

  1. 机器学习开源项目Top10
  2. CSMA/CD在全双工和半双工模式下的区别
  3. linux 二级域名设置
  4. vim ctags java源码_如何使用vim的插件Ctags查看Linux源码
  5. c#ovalshape_How to: Draw Shapes with the OvalShape and RectangleShape Controls (Visual Studio)
  6. AO3414相关技术资料
  7. android 输入模糊匹配_Android 模糊搜索
  8. Python笔记4:控制流
  9. banner图片通用设置
  10. 《Android编程权威指南(第三版)》第五章挑战练习Demo
  11. 尤雨溪:重头来过的 Vue3 带来了什么?
  12. 数学向量 java,数学向量和旋转(Topdown java game dev – physics problem)
  13. 阿里云申请和部署项目
  14. Arduino开发:网页控制ESP8266三色LED灯闪烁
  15. Learning to See in the Dark
  16. c语言设计奥运奖牌管理系统,求一个用C语言编程的奥运奖牌管理系统
  17. SpringCloud Alibaba 实战之《限流与熔断:Sentinel 在项目中的最佳实践》
  18. 数学:确定性的丧失---第八章 不合逻辑的发展:天堂之门
  19. 频谱仪测试gsm信号测试软件,浅谈GSM ORFS输出频谱测试
  20. 超导磁通量子计算机,超导磁通量子比特低频磁通噪声的测量

热门文章

  1. “00后”来了!数睿数据迎来新生代「无代码」生力军
  2. 总有一天我会绽放属于自己的光彩
  3. 人生苦短、我爱python_人生苦短,我爱Python007——基本语法(5)
  4. 批量分析德邦物流,查询送达时间与官网同步
  5. 【Linux】找不到ensss IP地址 或者连接不上ssh解决方法
  6. 破解boson netsim for ccnp 7.06(测试内链接有效)
  7. 卷积神经网络图片滤镜_使用深度神经网络创建艺术性的实时视频滤镜
  8. 被动对焦中的相位对焦与反差对焦
  9. 200家+人工智能技术公司组团 CCAI2016等你来(参会指南)
  10. OCAD应用:平行光路中打入型变焦系统设计