如果不匹配则从 abl 返回错误字符串

Returning error string from abl if no match

我正在尝试搜索数据库,然后在找到匹配项时删除一条记录。然后,如果没有找到匹配项,我想 return 一个带有错误消息的字符串格式错误。

DEF INPUT PARAM i_cCarID LIKE Car.carID NO-UNDO.
DEFINE OUTPUT PARAMETER o_cErrorMsg AS CHARACTER NO-UNDO.
DEF BUFFER carBuffer_B1 FOR Car.


FIND FIRST carBuffer_B1 WHERE carBuffer.carID= i_cCarID EXCLUSIVE-LOCK NO-ERROR.

    IF AVAIL(carBuffer_B1) THEN DO:
        DELETE carBuffer_B1 NO-ERROR.
        IF ERROR-STATUS:ERROR THEN DO:   
            o_cErrorMSG = "Error: ".
            RETURN o_cErrorMsg + ERROR-STATUS:GET-MESSAGE(1).
        END.
    END. 

从 java 调用时,此代码似乎 return 没有任何错误。

编辑 1. 找不到匹配项甚至会导致错误,还是您必须以某种方式显式 "throw" 错误?

您有一个输出参数,但该过程执行 RETURN。这就是您看不到任何错误的原因。您的程序需要是这样的:(示例有客户 table 并且没有足够的错误处理)

DEF INPUT PARAM i_cCustNum LIKE Customer.Cust-Num NO-UNDO.
DEFINE OUTPUT PARAMETER o_cErrorMsg AS CHARACTER NO-UNDO.

DEF BUFFER carBuffer_B1 FOR Customer.

FIND FIRST carBuffer_B1 WHERE carBuffer_B1.Cust-Num = i_cCarID EXCLUSIVE-LOCK NO-ERROR.

IF AVAIL(carBuffer_B1) THEN 
DO:
    DELETE carBuffer_B1 NO-ERROR.
    o_cErrorMsg = "Delete Succeeded for id " + string(i_cCarID).
END.
ELSE 
DO:
    o_cErrorMsg = "No record found with id " + string(i_cCarID).
END.