Oracle11g return关键字不起作用。。。如何停止程序的运行?

Oracle11g return关键字不起作用。。。如何停止程序的运行?,oracle11g,oracleforms,Oracle11g,Oracleforms,我有两个按钮,做不同的工作,但有共同的检查数据输入 所以我为这个检查做了一个程序单元,然后我从这两个按钮调用它 但我的问题是,当检查中出现错误时,我收到了针对用户的消息以及我所做的所有事情,但它返回到“代码内”按钮并继续进行,我在每个条件结束时设置了一个return关键字,以阻止代码运行,但它不工作。问题是什么?我怎么能在错误检查通过之前停止我的代码 检查数据输入程序单元示例 PROCEDURE CHECK_ENTRY IS BEGIN IF :block1.text_item1 IS

我有两个按钮,做不同的工作,但有共同的检查数据输入 所以我为这个检查做了一个程序单元,然后我从这两个按钮调用它 但我的问题是,当检查中出现错误时,我收到了针对用户的消息以及我所做的所有事情,但它返回到“代码内”按钮并继续进行,我在每个条件结束时设置了一个return关键字,以阻止代码运行,但它不工作。问题是什么?我怎么能在错误检查通过之前停止我的代码

检查数据输入程序单元示例

PROCEDURE CHECK_ENTRY IS
BEGIN
    IF  :block1.text_item1 IS NULL THEN 
            SET_ITEM_INSTANCE_PROPERTY('block1.text_item1',CURRENT_RECORD,VISUAL_ATTRIBUTE,'ERROR_ATR');
            SHOW_MESSAGE('example msg .');
            RETURN;
    ELSIF   :block2.text_item2 IS NULL THEN 
            SET_ITEM_INSTANCE_PROPERTY('block2.text_item2',CURRENT_RECORD,VISUAL_ATTRIBUTE,'ERROR_ATR');
            SHOW_MESSAGE('example msg2 .');
            RETURN;
END IF ;
END;
on_按钮按下触发器内的代码示例

PROCEDURE procedure_name IS

BEGIN

IF FORM_SUCCESS THEN
    DISPLAY_ERROR;

      :block1.text_item1:= :block2.text_item2;
      :block2.text_item2:=:block1.text_item1;

      **CHECK_ENTRY;**      /* here is the calling of previous program unit that check the data entry then  get back to here in case there is no error and continue commit the data and disabling text item so user wont be able to modify the data */

        COMMIT_FORM;
        program_unit('ORDER_DONE');         

ELSE
            ROLLBACK;
            DISPLAY_ERROR;
            SHOW_MESSAGE('please connect administrator.');
END IF;

END;

您的代码应该如下所示:

PROCEDURE CHECK_ENTRY IS
BEGIN
    IF  :block1.text_item1 IS NULL THEN 
            SET_ITEM_INSTANCE_PROPERTY('block1.text_item1',CURRENT_RECORD,VISUAL_ATTRIBUTE,'ERROR_ATR');
            SHOW_MESSAGE('example msg .');
            raise form_trigger_failure;
    ELSIF   :block2.text_item2 IS NULL THEN 
            SET_ITEM_INSTANCE_PROPERTY('block2.text_item2',CURRENT_RECORD,VISUAL_ATTRIBUTE,'ERROR_ATR');
            SHOW_MESSAGE('example msg2 .');
            raise form_trigger_failure;
END IF ;
END;

PROCEDURE procedure_name IS

BEGIN
      :block1.text_item1:= :block2.text_item2;
      :block2.text_item2:=:block1.text_item1;

CHECK_ENTRY;
IF FORM_SUCCESS THEN
    DISPLAY_ERROR;

        COMMIT_FORM;
        program_unit('ORDER_DONE');         

ELSE
            ROLLBACK;
            DISPLAY_ERROR;
            SHOW_MESSAGE('please connect administrator.');
END IF;

END;

在CHECK\u条目中,您认为错误发生在哪一行?--我看不到文本项中CHECK\u ENTRYnull值的任何错误处理。我将提示用户仅在文本项中输入其姓名或其他缺少的数据或数字。谢谢,我正在寻找关键字raise form\u trigger\u failure,就像c中的中断一样#