ITPub博客

首页 > 数据库 > Oracle > 【EBS FORM】ON_LOCK触发器相关

【EBS FORM】ON_LOCK触发器相关

Oracle 作者:J_Force 时间:2016-06-02 18:00:21 0 删除 编辑
  • ON-LOCK触发器的触发时机 
    帮助中说

    Fires whenever Form Builder would normally attempt to lock a row, such as when an operator presses a key to modify data in an item. The trigger fires between the keypress and the display of the modified data. ”

  • FORM端的ON-LOCK触发器用于获取oracle数据表的行级排他锁 
    当ON-LOCK 触发器fire时,他会试图去获得这个锁,如果这时没有其它session获得这个锁,或者说其它session己经释放这个锁,那么我们的form会很顺利的获得。否则会抛出app_exceptions.record_lock_exception异常。

    一般我们会写一个loop ..end loop;块出来,再定义一个计数器counter计录循环次数,把它作为参数传入到app_exception.record_lock_error(counter)处理过程中,在form中会弹出message,用于用户选择是否继续试图获得lock,或中止procedure的执行。在app_exception.record_lock_error()过程的最后,会raise一个form_trigger_failure的异常。

    • 这里要明白几点:
    • 我们调用此ON-LOCK触发器代码时,相应表中的某行即被锁定,众所周知,oracle数据库执行for update时,即获得锁,如果不commit或rollback或断掉session,这个锁是不会被主动释放的。但是在form中,我们只要保存这条记录时,或关掉form窗口,就会释放锁,不论你是否在ON-UPDATE中真正的执行了update语句,系统都会通过自动给你执行一个commit来实现。
    • 程序要保证在获取锁的时刻form界面上的值要和数据库中值相匹配。如果有不匹配的情况就会强制让你重新查询,再来修改,在修改保存前,你都拥这个锁。
来源: wfly2004.blog.163

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29599494/viewspace-2113023/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-04-10

  • 博文量
    19
  • 访问量
    37203