oracle 데이터베이스에서 키와 트리거의 저장 프로세스를 비활성화하거나 사용합니다

2346 단어 저장 프로세스
평소에 우리는 테이블 데이터를 대량으로 처리할 때 외부 키의 존재로 인해 진도에 영향을 미친다. 다음은 모든 외부 키와 트리거를 사용하지 않는 것과 모든 외부 키와 트리거를 사용하는 저장 과정이다. 우리가 테이블 데이터를 업데이트해야 할 때 사용하지 않는 저장 과정을 먼저 실행하고 완성한 후에 사용한 저장 과정을 실행하면 된다. 여러분에게 도움을 주기를 바란다.1. 모든 키와 트리거의 저장 프로세스를 비활성화합니다
create or replace procedure p_aaa_disable_trig_fk(p_in       in varchar2  ) is

  v_sql         varchar2(1000);
  v_ref         sys_refcursor;
  v_ref2        sys_refcursor;
  v_sql2        varchar2(1000);
begin
  for v_ref in (select object_name
                  from user_objects
                 where object_type = 'TRIGGER') loop
    v_sql := 'alter trigger ' || v_ref.object_name || ' disable';  -- disable  enable   

    execute immediate v_sql;
    dbms_output.put_line(v_sql);
  end loop;    

  for v_ref2 in (select  table_name,constraint_name
       from user_constraints where constraint_type='R' ) loop
    v_sql2 := 'alter table '||v_ref2.table_name||' disable constraint '||v_ref2.constraint_name;  -- disable  enable   

    execute immediate v_sql2;
    dbms_output.put_line(v_sql2);
  end loop;

exception
  when others then
    dbms_output.put_line(SQLCODE || ' ' || SQLERRM);

end p_aaa_disable_trig_fk;

2. 모든 키와 트리거의 저장 프로세스를 사용합니다(사실은 1의distable을 enable로 바꿉니다)
 create or replace procedure p_aaa_enable_trig_fk(p_in       in varchar2  ) is

 v_sql        varchar2(1000);
  v_ref        sys_refcursor;
  v_ref2        sys_refcursor;
  v_sql2        varchar2(1000);
begin
  for v_ref in (select object_name
                  from user_objects
                 where object_type = 'TRIGGER') loop
    v_sql := 'alter trigger ' || v_ref.object_name || ' enable';  -- disable  enable   

    execute immediate v_sql;
    dbms_output.put_line(v_sql);
  end loop;  

  for v_ref2 in (select  table_name,constraint_name
       from user_constraints where constraint_type='R' ) loop
    v_sql2 := 'alter table '||v_ref2.table_name||' enable constraint '||v_ref2.constraint_name;  -- disable  enable   

    execute immediate v_sql2;
    dbms_output.put_line(v_sql2);
  end loop;

exception
  when others then
    dbms_output.put_line(SQLCODE || ' ' || SQLERRM);

end p_aaa_enable_trig_fk;

직접 측정하면 효과가 있으니 여러분에게 도움이 되었으면 합니다!

좋은 웹페이지 즐겨찾기