我新建的表departments有个字段department_id,是列级主键。
现在我想删除这个主键,使用了以下语句:delete from user_constraints 
where lower(table_name)='departments'
and constraint_type='P'
被告知权限不足。因为不是dba所以对于user_constraints这样的系统视图没有操作权限吧。
然后我又尝试了以下语句:alter table departments
drop constraint 
(
  select constraint_name
  from user_constraints 
  where lower(table_name)='departments'
  and constraint_type='P'
)
ORA-02250: 约束条件名缺失或无效。然后我很无奈地先在user_constraints中查到constraint_name叫SYS_C005284,然后显式调用以下语句:alter table departments
drop constraint SYS_C005284 cascade才删掉了。
我想请问有没有更通用一点的删除一张表的列级主键的方法?

解决方案 »

  1.   

    这个就最通用:
    alter table departments drop constraint SYS_C005284 cascade
      

  2.   

      select 'alter table departments drop constraint ' || constraint_name || ';'
        from user_constraints
       where lower(table_name) = 'departments'
         and constraint_type = 'P'
    先执行查询,然后把执行后的语句复制出来粘贴到plsql里,执行下就可以了
      

  3.   

    begin
    for i in(select table_name,constraint_name from user_constraints where lower(table_name)='xxx' and constraint_type='P') loop
    execute immediate 'alter table '||i.table_name ||' drop constraint '||i.constraint_name;
    end;