![](https://csdnimg.cn/release/download_crawler_static/85314612/bg7.jpg)
Oracle Developer可能不确认它们就把这些变化提交给数据库,因为它立即把每一样东
西都标记为Va l i d (有效的)。当触发器启动时,重新确认可能会导致无限的确认循环,造
成新变化,并要求更多的确认。
登记中最普通的触发器是P r e - I n s e r t。P r e - U p d a t e 、P r e - D e l e t e 、P o s t - I n s e r t 、P o s t - U p d a t e 和
P o s t - D e l e t e (插入之前、更新之前、删除之前、插入之后、更新之后和删除之后 )触发器,这些
触发器包含有你根据要登记到数据库中的变化而写的代码,这些代码用于检查多表条件或操
作其他表的数据,也可能包含有加到应用程序以跟踪特定表活动的检查更新。
注意 Pre-和Post-触发器的许多行为可能更适合于在服务器触发器里编码。就是说,可
能想为操作前后的行为在数据库中加触发器。当这些触发器必须引用数据库内不存在
的数据时,比如控制块的项值,或还没有移到服务器数据库的其他数据块的值,应该
把这些数据移到应用程序的触发器。即如果需要在P L / S Q L代码中引用一个块和项,那
么可能需要在应用程序中编写触发器代码。使用这些触发器的另外一个理由是把信息
处理从数据库服务器移到应用程序,使得到更好更有用的信息成为可能。
例如,L e d g e r 表单让Ta l b o t 农场的员工在每天的日记中输入事务,在删除一行之前, P r e -
D e l e t e触发器包含有代码查寻用户关于删除事务的安全访问等级。如果用户没有合适的安全等
级,则触发器失败,系统显示一个错误信息,告诉用户 (他或她)没有删除事务的特权。
2) 锁定 O r a c l e 数据库管理程序通过锁定资源 (比如锁定表和行),允许同时访问数据而确
保其完整性。锁定是O r a c l e实现事务的方式或工作逻辑单元。某些数据库应用程序锁定整个表,
另外一些则锁定数据的物理页。 Oracle Developer使用专门的行锁定,即在特定的行上锁定,
这种锁定防止其他事务获得这一行,防止它们更新或删除这一行。在 Oracle 的SQL SELECT
语句中加FOR UPDATE OF子句,就需要获得行锁定的信号。
按照缺省设置,在以下任一条件下, Oracle Developer获得行锁定:
■ 当操作员改变数据库行中的基础表项的值时,包括从 N U L L (空)值变化到 n o n - N U L L ( 非
空)值。
■ 当操作员通过Record | LOCK (记录|锁定) 菜单项为当前记录要求明确的行锁定时。
■ 当触发器通过U P D AT E (更新)或D E L E T E 语句对数据库进行修改时。
■ 当触发器调用 D E L E T E _ R E C O R D 、E N T E R _ Q U E RY ( F O R _ U P D AT E ) 、E X E C U T E _
Q U E RY ( F O R _ U P D AT E ) ,或L O C K _ R E C O R D 内部函数时。
■ 当触发器包含显示的 S Q L L O C K TA B L E 语句时。通常,这将严重影响应用程序事务的
性能,如果没有绝对充足的理由,没有经过了解该事务的人对设计的专门检查,不应
第5章 高级进程、触发器和跨平台设计 8 7