如何在Oracle Forms 6i中还原对记录的更改?

Ahm*_*mad 2 oracle triggers plsql oracleforms

我有一个在Oracle Forms 6i中运行的表单,其中包含从数据库中的某个表填充的表格格式化的行.一列启用了[List_Of_Values]属性,允许用户在可能的值中进行选择.

如果用户有权执行此操作,则只能选择列表中的某些值,并且我已创建[WHEN-VALIDATE-ITEM]触发器以在更改值后检查权限.触发器引发form_trigger_failure以防止用户保存所做的更改.

问题是如果用户收到关于缺少选择值的权限的通知,则用户无法知道先前的(旧)值以再次选择它,除非表单被取消将导致他的其他(有效的)变化也会丢失.

这是我在触发器中编写的代码

DECLARE
NEW_LOCATION  VARCHAR2(100);
BEGIN
NEW_LOCATION := :BLK_MAT_STG_PLACES_PILE.STG_LOC_ID;

    IF NEW_LOCATION LIKE 'OH01%' THEN
        IF NOT :GLOBAL.USER_ID LIKE 'Admin%' THEN
            MESSAGEBOX('You are not authorized to select this value');

            /* What can I write to load the old value to this item? */ 
            RAISE FORM_TRIGGER_FAILURE;
        END IF;
    END IF;
END;
Run Code Online (Sandbox Code Playgroud)

我尝试过ROLLBACK但是没有将旧值恢复为表单.我也尝试过SYNCHRONIZE,但这没有效果.除了再次通过数据库表以取出值之外,还有其他选择吗?

jva*_*jva 5

BEGIN    
    IF NEW_LOCATION LIKE 'OH01%' THEN
        IF NOT :GLOBAL.USER_ID LIKE 'Admin%' THEN
            MESSAGEBOX('You are not authorized to select this value');

            /* Return it to the original value that was fetched from database */ 
            :BLK_MAT_STG_PLACES_PILE.STG_LOC_ID :=
              get_item_property('BLK_MAT_STG_PLACES_PILE.STG_LOC_ID'
                               ,DATABASE_VALUE);

            RAISE FORM_TRIGGER_FAILURE;
        END IF;
    END IF;
END;
Run Code Online (Sandbox Code Playgroud)