Re-raise/-throw 一个错误

Re-raise/-throw an error

我想 "re-raise" 在 NO-ERROR 语句之后出现错误,如下所示:

FIND FIRST table
    WHERE table.ID = myID
    EXCLUSIVE-LOCK NO-WAIT NO-ERROR.

IF (NOT AVAILABLE temp AND LOCKED temp) THEN
    /* Here I want to raise/throw the last error ("Raise ERROR:STATUS") */

IF (NOT AVAILABLE table) THEN
    CREATE table.

Progress中有这样的说法吗?

在 OpenEdge 10.1C 及更高版本中,您可以抛出错误。要重新抛出错误,您必须先捕获它。

所以,

IF (NOT AVAILABLE temp AND LOCKED temp) THEN
    UNDO, THROW NEW Progress.Lang.AppError 
         (ERROR-STATUS:GET-MESSAGE (1), 
          ERROR-STATUS:GET-MESSAGE-NUM (1)) .

或者您首先发现了错误:

DO ON ERROR UNDO, THROW: /* ABL try */
    FIND FIRST table
        WHERE table.ID = myID
        EXCLUSIVE-LOCK NO-WAIT .

    CATCH err AS Progress.Lang.SysError:
        IF LOCKED temp THEN
             UNDO, THROW err . /* re-THROW */
    END CATCH .
END . /* ABL try block */

IF (NOT AVAILABLE table) THEN
    CREATE table.

迈克的回答是正确的。但只是为了提供更早版本的解决方案,因为这是永久记录:以前要捕获可用,正确的方法是 RETURN 错误到调用程序。再次使用 NO-ERROR 之前,ERROR-STATUS 不会被清除,您仍然可以查询可用的错误消息。