按选定列删除唯一约束

时间:2014-08-05 12:11:51

标签: sql oracle oracle11g

我想从两个数据库中删除约束,并且由于这些约束具有不同的名称,我想通过选定的列删除它们。有可能吗?

例如:

  1. 表格CAR包含ID, NAME, ENGINE
  2. 表对列NAME, ENGINE
  3. 具有唯一约束
  4. db1约束上调用constraint1122,在db2上调用aaconstraint
  5. 我想使用相同的SQL查询删除这两个约束,但我不想使用约束名称

1 个答案:

答案 0 :(得分:1)

使用此:

DECLARE
  l_constraint_name varchar2(100);
  l_table_name varchar2(100);
  l_sql varchar2(2000);
BEGIN
  select uc.constraint_name, uc.table_name
    INTO l_constraint_name, l_table_name
    from user_constraints uc
       , user_cons_columns cc1
       , user_cons_columns cc2
   where constraint_type = 'U'
     and cc1.constraint_name = uc.constraint_name
     and cc2.constraint_name = uc.constraint_name
     and cc1.column_name = 'NAME'
     and cc2.column_name = 'ENGINE'
     and uc.table_name = 'CAR'
  ;
  DBMS_OUTPUT.put_line('alter table '|| l_table_name ||' drop constraint ' || l_constraint_name);
  execute immediate 'alter table '|| l_table_name ||' drop constraint ' || l_constraint_name;
end;

您必须为每个数据库运行两次,一次。确保您使用的是CAR

所有者