OracleForms - form_success 在 key_commit 中变为真,尽管存在数据库错误

OracleForms - form_success becomes true in key_commit despite there is database error

我的表单中有一个名为 oncelik 的文本项,还有 table 中的一列。我为该列创建了 unique index,因此记录不能重复。

当用户输入重复数据并尝试提交时,下面的代码在 KEY_COMMIT 触发器中运行,并且在行 commit_form; ON_ERROR 触发器触发后显示错误,如“你无法输入重复数据'

在该提交触发器保持 运行 并且 form_success 变为真之后,表单也显示 "insert successful"。并且表单不会重新加载,所以它看起来像是插入了重复的数据(但它不是)

我想在触发唯一索引错误时停止提交触发器或使 form_success 为假。提交代码如下,有什么建议吗?

    Pre_Commit_Form;
    commit_form;  --this line fires the ON_ERROR
    Post_Commit_Form;     

    if form_success then  --after error this block runs and form says insert success
        ShowMessage(proc,True,'AKA-00303');
    else
        ShowError;
        ShowMessage(proc,True,'AKA-00304');
    end if;

注意:我知道我可以控制表单上的重复数据,但我更喜欢让数据库错误停止提交过程。

问题是您正在通过 ON-ERROR-触发器丢弃错误。

放一个

RAISE FORM_TRIGGER_FAILURE; -- To make your error silent

在触发器结束时确保故障状态保持所需。

要明确处理您的唯一密钥问题,您可以检查 ON-ERROR-Trigger 中的 ERROR_CODE,然后改为 RAISE DUP_VAL_ON_INDEX