的語法確實在Oracle中禁用觸發器:
SQL> select trigger_name, status from user_triggers
2 where table_name='TEST'
3/
TRIGGER_NAME STATUS
------------------------------ --------
TEST_TRIGGER ENABLED
SQL> ALTER TABLE test DISABLE ALL TRIGGERS
2/
Table altered.
SQL> select trigger_name, status from user_triggers
2 where table_name='TEST'
3/
TRIGGER_NAME STATUS
------------------------------ --------
TEST_TRIGGER DISABLED
SQL>
但是它不會做的外鍵,或任何其他約束東西。這是因爲Oracle不使用觸發器來執行這些事情。好吧,在封面的約束和用戶定義的觸發器可能共享某些低級別的內核代碼。但在我們說的層面上,他們是兩碼事。
如果要禁用表上恐怕你需要使用像這樣的外鍵:
SQL> select constraint_name, status from user_constraints
2 where table_name = 'EMP'
3 and constraint_type = 'R'
4/
CONSTRAINT_NAME STATUS
------------------------------ --------
FK_DEPTNO ENABLED
SQL> begin
2 for r in (select constraint_name, status from user_constraints
3 where table_name = 'EMP'
4 and constraint_type = 'R')
5 loop
6 execute immediate 'alter table emp disable constraint '||r.constraint_name;
7 end loop;
8* end;
9/
PL/SQL procedure successfully completed.
SQL> select constraint_name, status from user_constraints
2 where table_name = 'EMP'
3 and constraint_type = 'R'
4/
CONSTRAINT_NAME STATUS
------------------------------ --------
FK_DEPTNO DISABLED
SQL>
這是諸如此類的事情,你可能會想要包裝一個用戶定義的函數,它將TABLE_NAME作爲參數。您還需要一個類似的功能來重新啓用約束。
來源
2011-04-01 14:25:19
APC
事實上,我一直有點太快來驗證答案......這將禁用屬於mytable的約束,而不是與mytable相關的約束。 Postgresql中的所有禁用觸發器的功能是禁用指向mytable的外鍵... – alci 2011-04-01 18:43:55
好的,在這裏禁用外鍵的相關sql指向mytable:'select'alter table'|| a.owner ||'。 「|| a.table_name || '禁用約束'|| a.constraint_name ||';' 從ALL_CONSTRAINTS一個,ALL_CONSTRAINTS b 其中a.constraint_type = 'R' 和a.r_constraint_name = b.constraint_name 和a.r_owner = b.owner 和b.table_name = 'MYTABLE';' – alci 2011-04-01 19:05:16