文档章节

Oracle判断表、列、主键是否存在的方法

o
 osc_z1hvg4cu
发布于 2018/04/24 13:37
字数 615
阅读 15
收藏 0

钉钉、微博极速扩容黑科技,点击观看阿里云弹性计算年度发布会!>>>

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

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

declare tableExistedCount number;   --声明变量存储要查询的表是否存在
begin 
     select 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;
DECLARE
num NUMBER;
BEGIN
SELECT COUNT(1)
INTO num
from cols
where table_name = upper('tableName')
and column_name = upper('columnName');
IF num > 0 THEN
execute 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;

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
转:Oracle判断表、列、主键是否存在的方法

转载地址:http://blog.csdn.net/wxdzxl/article/details/8063774 一。判断Oracle表是否存在的方法 declare tableExistedCount number; --声明变量存储要查询的表是否存在 begin select cou...

彭登灏
2015/09/29
1
0
SQL Server上进行表设计时表的主键设计问题

关于数据库的逻辑设计,是一个很广泛的问题。本文主要针对开发应用中遇到在MS SQL Server上进行表设计时,对表的主键设计应注意的问题以及相应的解决办法。 主键设计现状和问题 关于数据库表...

五味格子
2011/05/11
24
0
hibernate 中id生成策略

数据库的设计和操作中,我们通常会给表建立主键。 主键,可以分为自然主键和代理主键。 自然主键表示:采用具有业务逻辑含义的字段作为表的主键。比如在用户信息表中,采用用户的身份证号码作...

Ye_Wang
2015/06/19
19
0
Hibernate主键生成策略

在Hibernate中,提供了主键生成策略。下面是比较常用的几种: 1:assigned ----表示在新增数据时由应用程序指定主键的值。主要针对主键是采用自然主键的形式。这种方式,适用于主键列不是自动...

peizhenfly
2015/03/16
121
0
MySQL数据库基础-JAVA

数据库 MySQL初步 MySQL基础认知 (Oracle真的是走哪祸害到哪23333) Java多用MySQL和Oracle SQLServer也收费,但是还行,比Oracle便宜,一个差不多3w多 SQLite被嵌入到了安卓系统中,主要用...

osc_9rkv1ihi
2019/09/23
1
0

没有更多内容

加载失败,请刷新页面

加载更多

263. Ugly Number

题目: 263. Ugly Number 题目地址:https://leetcode.com/problems/ugly-number/ Write a program to check whether a given number is an ugly number. Ugly numbers are positive numbers......

JiaMing
32分钟前
46
0
HCIA_ARP01

ARP(地址解析协议) eNSP 常用路由器:AR2220 常用交换机:S5700、S3700 常用终端:PC、MCS(主播服务器) 设备连线:Copper(以太网用到的双绞线)、Serial(串口线,2SA接口)、Auto(自动连...

创业789
35分钟前
13
0
如何在Rails 4中使用问题 - How to use concerns in Rails 4

问题: The default Rails 4 project generator now creates the directory "concerns" under controllers and models. 默认的Rails 4项目生成器现在在控制器和模型下创建目录“Concer”。 ......

fyin1314
39分钟前
19
0
【LeetCode】 57 括号生成

题目: 解题思路: https://leetcode-cn.com/problems/generate-parentheses/solution/hui-su-suan-fa-by-liweiwei1419/ 代码: import java.util.ArrayList;import java.util.List;publ......

JaneRoad
昨天
8
0
度小满上线“推有钱”贷款推广平台,合伙人直推佣金为贷款金额的2.5%

来源 | 镭射财经 作者 | 黄老邪 2020年,蓬勃发展的消金行业受到新冠肺炎疫情的冲击,用户增长放缓、逾期率上升成为共性问题。但疫情或许只是导火索,对于消金行业来说,用户增长红利的消退,...

镭射财经
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部