Temporarily disable table foreign key constraints:
--临时禁用表外键约束:
declare
v_sql varchar2(1000);
v_table_name varchar2(1000);
v_ref sys_refcursor;
begin
for v_ref in ( --查询出表的主外键信息和表名等字段
Select a.Owner 外键拥有者,
a.Table_Name 外键表,
c.Column_Name 外键列,
b.Owner 主键拥有者,
b.Table_Name 主键表,
d.Column_Name 主键列,
c.Constraint_Name 外键名,
d.Constraint_Name 主键名
From User_Constraints a,
user_Constraints b,
user_Cons_Columns c, --外键表
user_Cons_Columns d --主键表
Where a.r_Constraint_Name = b.Constraint_Name
And a.Constraint_Type = 'R'
And b.Constraint_Type = 'P'
And a.r_Owner = b.Owner
And a.Constraint_Name = c.Constraint_Name
And b.Constraint_Name = d.Constraint_Name
And a.Owner = c.Owner
And a.Table_Name = c.Table_Name
And b.Owner = d.Owner
And b.Table_Name = d.Table_Name
and a.Table_Name in (
--这里查询出要禁用的表的名称
select t.OBJECT_NAME DT_NAME from user_objects t
join user_tab_comments t1 on t.OBJECT_NAME=t1.TABLE_NAME
where t.OBJECT_TYPE='TABLE' and t.object_name like '%_REQ'
)
and c.Column_Name = 'PID'
) loop
v_sql := 'alter table ' || v_ref.外键表 || ' modify constraint ' || v_ref.外键名 || ' disable; ';
--execute immediate v_sql;
dbms_output.put_line(v_sql);
end loop;
exception
when others then
dbms_output.put_line(SQLCODE || ' ' || SQLERRM);
end;