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

 

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

一.判断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;

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

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;

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果要判断 Oracle 数据库中某张是否存在某个联合,可以使用以下 SQL 语句: ```SQL SELECT COUNT(*) FROM all_constraints WHERE constraint_type = 'P' AND table_name = '名' AND constraint_name = '联合名'; ``` 如果查询结果返回的是 1,则示该存在指定的联合;如果查询结果返回的是 0,则示该存在指定的联合。 上面的 SQL 语句中,`all_constraints` 包含了所有用户和公共对象的约束信息。`constraint_type` 包含了约束的类型,其中 `P` 约束。`table_name` 包含了约束所属的名,`constraint_name` 包含了约束的名称。 例如,如果要判断 `employees` 是否存在名为 `emp_pk` 的联合,可以使用如下 SQL 语句: ```SQL SELECT COUNT(*) FROM all_constraints WHERE constraint_type = 'P' AND table_name = 'EMPLOYEES' AND constraint_name = 'EMP_PK'; ``` ### 回答2: 在Oracle中,我们可以使用系统视图ALL_CONS_COLUMNS判断某张是否存在某个联合。 首先,我们需要查询ALL_CONS_COLUMNS视图以查看是否存在所需的联合。这个视图包含了当前用户下所有视图和的约束信息。 我们可以使用如下的SQL查询语句: SELECT * FROM ALL_CONS_COLUMNS WHERE TABLE_NAME = '名' AND CONSTRAINT_NAME = '名称'; 其中,'名'是你要查询的的名称,'名称'是你要查询的联合的名称。 如果查询结果返回了行数据,说明该存在所需的联合,否则就是不存在。 需要注意的是,查询结果可能会包含多行数据,因为一个可能会有多个联合。因此在使用查询结果做判断时,需要将结果进行处理,即判断查询结果是否为空或者获取其中一行数据进行判断。 总的来说,可以通过查询ALL_CONS_COLUMNS视图来判断Oracle是否存在某个联合。 ### 回答3: 要判断Oracle数据库中的某张是否存在某个联合,可以使用以下步骤: 1. 首先,查找有关该的信息。可以通过查询数据库的系统或视图来获取该的信息。例如,可以查询`ALL_TABLES`或`DBA_TABLES`视图,获取该名、所有者等信息。 2. 接下来,查找该的约束信息。可以通过查询`ALL_CONSTRAINTS`或`DBA_CONSTRAINTS`视图来获取该的约束信息。通过约束名或者名可以确认该是否存在联合。 3. 如果查找到该的约束信息,可以根据约束类型来判断是否存在联合。在Oracle中,联合是一种特殊约束,它们的约束类型可能是`P`(约束)或`U`(唯一约束)。可以根据约束类型来判断是否是联合。 4. 如果要确定该是否存在特定的联合,还要进一步检查该的联合。可以通过查询`ALL_CONS_COLUMNS`或`DBA_CONS_COLUMNS`视图来获取该的联合信息。通过联合的约束名或者名,可以获取联合的所有。 综上所述,在Oracle判断某张是否存在某个联合,可以通过查询系统或视图获取信息,查询约束或视图获取约束信息并根据约束类型判断是否是联合,最后再查询联合信息来进一步确认。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值