Oracle batch disable table foreign key constraints

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;

 

Guess you like

Origin blog.csdn.net/liangmengbk/article/details/109330259