試圖探索替代使用插入觸發器的解決方案。像基於API的方法和利用不同方法的優點和缺點。擺脫插入觸發器
擺脫插入觸發器
回答
在API接近你會創建一個過程來進行這兩種操作 - 這樣的:
package body emp_api is
procedure insert_emp (...) is
begin
insert into emp (...) values (...);
-- Insert that was previously in trigger
insert into other_table (...) values (...);
end;
end;
然後你力應用程序,給他們EXECUTE的API包,但沒有INSERT訪問使用API/UPDATE/DELETE訪問表。
當然,您需要進行測量以確保這種方法實際上更快。 – HLGEM 2011-02-16 14:30:15
如果你想保證在插入tableA的時候有一條記錄插入tableB,那麼保持觸發器。如果批量加載到tableA中,並且可以保證在此期間將唯一的進程加載到該表中,則可以禁用該功能。
只要您刪除觸發器,就沒有關於插入到tableB的任何保證。你唯一的希望是,任何和所有可能插入到tableA中的程序(你是否真的知道所有這些?)都堅持把二級插入到tableB中。這是「通過公司策略實現的數據完整性」,而不是通過Oracle執行的數據完整性。
這種方法取決於你有多少關心tableB中數據的狀態我想。
我不會去表apis(TAPIs)的路由,它現在強制任何/所有操作通過處理邏輯的一些pl/sql api。根據我的經驗,這些幾乎總是很慢且很麻煩。
在DDL中您可以使用ALTER TRIGGER或ALTER TABLE禁用觸發器。
ALTER TRIGGER triggername DISABLE; -- disable a single trigger
ALTER TABLE tablename DISABLE ALL TRIGGERS; -- disable all triggers on a table
要在運行時做到這一點,你就必須使用動態SQL,並在程序運行時必須擁有該表或其他有必要的特權模式。
EXECUTE IMMEDIATE 'ALTER TRIGGER tablename DISABLE ALL TRIGGERS';
有關啓用/禁用觸發器的詳細信息,請參閱http://download.oracle.com/docs/cd/B28359_01/server.111/b28310/general004.htm
- 1. 擺脫「* .exe觸發了斷點」-Messagebox
- 2. 錯誤觸發器插入後插入
- 3. 插入觸發器插入值返回
- 4. 如何防止未插入行時觸發插入觸發器?
- 5. T-SQL插入觸發器
- 6. SQL觸發器,從插入
- 7. 插入表的觸發器
- 8. 創建觸發器插入
- 9. MySQL的觸發器 - 插入
- 10. 條件插入觸發器
- 11. SQL Server:插入觸發器
- 12. MYSQL觸發器 - 插入
- 13. 觸發器執行插入
- 14. 觸發器插入錯誤
- 15. 插入sql觸發器
- 16. mysql觸發器插入
- 17. SQL插入觸發器
- 18. SQL觸發器插入
- 19. 通用插入觸發器
- 20. 插入,更新觸發器
- 21. 插入觸發器問題
- 22. SQL - 觸發器插入件
- 23. 用觸發器插入
- 24. 插入後觸發器
- 25. 插入後觸發器oracle
- 26. postgresql插入觸發器
- 27. sql server觸發器插入
- 28. 觸發器中止插入
- 29. 觸發插入
- 30. 插入觸發
如果你想我們展示一些代碼,請通過展示你有什麼迄今啓動。 – 2011-02-10 08:54:00
也許觸發器需要進行性能調整。 – HLGEM 2011-02-16 14:30:32