Oracle Forms中能否在单个触发器内设置两个不同的定时器?
实现正确性判断
你的基础实现逻辑完全可用,核心功能符合Oracle Forms定时器的开发规范:
WHEN_NEW_FORM_INSTANCE触发器中创建两个不同时长的一次性定时器的语法正确,60000毫秒对应60秒、270000毫秒对应270秒的时长配置符合需求WHEN_TIMER_EXPIRED触发器中通过GET_APPLICATION_PROPERTY(timer_name)获取触发定时器名称、再分支执行对应逻辑的思路正确,到期退出表单的语法也符合规范。
可优化点
- 新增定时器创建前的重名校验
若表单其他逻辑存在创建同名定时器的可能,创建前先删除已存在的同名定时器,避免创建失败导致报错:DECLARE BEGIN IF GET_TIMER('POCETAK') IS NOT NULL THEN DELETE_TIMER('POCETAK'); END IF; IF GET_TIMER('KRAJ') IS NOT NULL THEN DELETE_TIMER('KRAJ'); END IF; CREATE_TIMER('POCETAK',60000,NO_REPEAT); CREATE_TIMER('KRAJ',270000,NO_REPEAT); EXCEPTION WHEN OTHERS THEN -- 可按需增加报错日志记录逻辑 NULL; END; - 删除冗余变量
你声明的timer_pocetak、timer_zatvori两个TIMER类型变量后续没有被使用,可以直接删除,减少无效代码。 - 统一分支判断的大小写
对定时器名称增加大写转换处理,避免部分环境大小写敏感导致分支判断失效:v_timer_name := UPPER(GET_APPLICATION_PROPERTY(timer_name)); - 优化退出表单的用户体验
执行EXIT_FORM前先判断表单是否有未保存的修改,可弹出提示询问用户是否需要保存数据,避免用户操作内容被直接回滚丢失。 - 新增应用信息清理的异常捕获
用异常块包裹DBMS_APPLICATION_INFO相关调用,避免数据库权限不足、版本不兼容等问题导致退出流程报错。
内容的提问来源于stack exchange,提问作者VedranaC
相关产品推荐
相关产品推荐

