试图探索替代使用插入触发器的解决方案。像基于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. 错误触发器插入后插入
- 2. 插入触发器插入值返回
- 3. 如何防止未插入行时触发插入触发器?
- 4. 创建触发器插入
- 5. sql server触发器插入
- 6. MySQL的触发器 - 插入
- 7. T-SQL插入触发器
- 8. 插入sql触发器
- 9. SQL插入触发器
- 10. 插入后触发器
- 11. SQL触发器插入
- 12. 触发器插入错误
- 13. 插入触发器问题
- 14. 插入表的触发器
- 15. 触发插入
- 16. MySQL插入死锁,引发触发器
- 17. 摆脱
- 18. 插入时触发
- 19. 如何在每次插入后触发触发器 - Oracle(批量插入)
- 20. Oracle SQL触发器插入/更新
- 21. 插入触发器导致问题
- 22. SQL触发器插入到表
- 23. SQLite触发器插入错误
- 24. Oracle触发器插入/更新
- 25. 更新触发器插入为空
- 26. 插入复制不使用触发器
- 27. 插入触发器错误后
- 28. 创建“后插入”触发器
- 29. 插入SQL Server 2000触发器
- 30. 在插入触发器MySQL的
如果你想我们展示一些代码,请通过展示你有什么迄今启动。 – 2011-02-10 08:54:00
也许触发器需要进行性能调整。 – HLGEM 2011-02-16 14:30:32