平時我們在批量處理表資料的時候,經常因為外來鍵的存在影響進度,下面分別是禁用所有外來鍵和觸發器的,和啟用所有外來鍵和觸發器的儲存過程,當我們需要對錶資料進行更新時,先執行禁用的儲存過程,完成之後在執行啟用的儲存過程即可,希望對大家有所幫助。
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;
親測有效,希望對大家有所幫助! ORACLE 禁用 啟用外來鍵和觸發器
1 oracle資料庫中的外來鍵約束名都在表user constraints中可以查到。其中constraint type r 表示是外來鍵約束。2 啟用外來鍵約束的命令為 alter table table name enable constraint constraint name 3 禁用外來...
ORACLE 禁用 啟用外來鍵和觸發器
oracle 禁用 啟用外來鍵和觸發器 在很多資料庫維護工作中,經常會遇到對現有資料的匯入匯出的操作,但是資料庫中表與表之間有很多外間關係,不能直接的按維護要求對資料進行操作,所有需要對這些外來鍵和觸發器臨時的禁用,然後在運算元據,完成操作後在啟用對應的外來鍵和觸發器,下面的指令碼就是提供對整個使用...
ORACLE 禁用 啟用外來鍵和觸發器
在很多資料庫維護工作中,經常會遇到對現有資料的匯入匯出的操作,但是資料庫中表與表之間有很多外間關係,不能直接的按維護要求對資料進行操作,所有需要對這些外來鍵和觸發器臨時的禁用,然後在運算元據,完成操作後在啟用對應的外來鍵和觸發器,下面的指令碼就是提供對整個使用者物件的外來鍵和觸發器的禁用和啟用指令碼...