Oracle Forms中执行Rollback会清空表单的问题如何解决
Oracle Forms Rollback按钮不清空表单解决方案
标准ROLLBACK命令在Oracle Forms中执行时,会回滚所有未提交的数据库事务,同时清除表单内已查询加载的记录缓存、清空非数据库块的字段内容,因此会出现全表单数据清空的问题。可根据你的业务场景选择以下解决方案:
- 替换为
FORM_ROLLBACK内置过程
FORM_ROLLBACK是Oracle Forms专属的受限过程,仅回滚当前表单内的未提交数据库变更,不会清除已查询加载到表单中的基础数据,也不会清空非数据库块的内容。如果仅需要回滚到最近一次提交的状态,直接把按钮触发器中的ROLLBACK替换为FORM_ROLLBACK即可。
- 用保存点控制回滚范围
如果仅需要回滚某一段操作的变更,不需要回滚所有未提交内容,可在操作前标记保存点,回滚时仅回退到保存点位置:
-- 业务操作执行前标记保存点 SAVEPOINT sp_before_opt; -- 你的业务操作代码段 -- ... -- 仅回滚保存点之后的变更,不影响之前加载的表单数据 ROLLBACK TO SAVEPOINT sp_before_opt;
- 回滚前后手动备份恢复非数据库块数据
如果表单内存在非数据库类型的块,回滚后仍有自定义字段被清空,可在回滚前先将需要保留的字段值存入全局变量或表单参数,回滚完成后再回写:
-- 回滚前备份需要保留的非数据库块字段值 :PARAMETER.backup_field1 := :CUSTOM_BLOCK.field1; :PARAMETER.backup_field2 := :CUSTOM_BLOCK.field2; -- 执行回滚操作 FORM_ROLLBACK; -- 回写字段值 :CUSTOM_BLOCK.field1 := :PARAMETER.backup_field1; :CUSTOM_BLOCK.field2 := :PARAMETER.backup_field2;
内容的提问来源于stack exchange,提问作者Deva
相关产品推荐
相关产品推荐

