Oracle SQL 开发人员 - 禁用模式中的所有约束
Oracle SQL Developer - Disabling all constraints from schema
我有两个关于禁用所有约束的查询,但它们似乎不起作用。
第一个禁用外键:
select 'alter table '||table_name||' disable constraint '||constraint_name||';'
from user_constraints
where constraint_type ='R'
and status = 'ENABLED';
第二个禁用其他一切:
select 'alter table '||table_name||' disable constraint '||constraint_name||';'
from user_constraints
where status = 'ENABLED';
现在,当我使用 SELECT * FROM USER_CONSTRAINTS
检查约束时
我看他们都还是'ENABLED'。
这是为什么?
我尝试在 运行 查询后提交,但无济于事。
我的目标是使用这些查询禁用所有表的约束。
根据我上面的评论,运行 2 个查询是不够的,然后您需要 运行 这些生成的所有 alter table 语句。但是,您可以使用 PL/SQL 一次完成所有操作。我已将 2 个查询合并为一个,首先使用 order by
处理外键 (constraint_type = 'R'):
begin
for r in
( select 'alter table '||table_name||' disable constraint '||constraint_name as statement
from user_constraints
where status = 'ENABLED'
order by case constraint_type when 'R' then 1 else 2 end
)
loop
execute immediate r.statement;
end loop;
end;
我有两个关于禁用所有约束的查询,但它们似乎不起作用。
第一个禁用外键:
select 'alter table '||table_name||' disable constraint '||constraint_name||';'
from user_constraints
where constraint_type ='R'
and status = 'ENABLED';
第二个禁用其他一切:
select 'alter table '||table_name||' disable constraint '||constraint_name||';'
from user_constraints
where status = 'ENABLED';
现在,当我使用 SELECT * FROM USER_CONSTRAINTS
检查约束时
我看他们都还是'ENABLED'。
这是为什么?
我尝试在 运行 查询后提交,但无济于事。
我的目标是使用这些查询禁用所有表的约束。
根据我上面的评论,运行 2 个查询是不够的,然后您需要 运行 这些生成的所有 alter table 语句。但是,您可以使用 PL/SQL 一次完成所有操作。我已将 2 个查询合并为一个,首先使用 order by
处理外键 (constraint_type = 'R'):
begin
for r in
( select 'alter table '||table_name||' disable constraint '||constraint_name as statement
from user_constraints
where status = 'ENABLED'
order by case constraint_type when 'R' then 1 else 2 end
)
loop
execute immediate r.statement;
end loop;
end;