我新建的表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才删掉了。
我想请问有没有更通用一点的删除一张表的列级主键的方法?
现在我想删除这个主键,使用了以下语句: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才删掉了。
我想请问有没有更通用一点的删除一张表的列级主键的方法?
alter table departments drop constraint SYS_C005284 cascade
from user_constraints
where lower(table_name) = 'departments'
and constraint_type = 'P'
先执行查询,然后把执行后的语句复制出来粘贴到plsql里,执行下就可以了
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;