【问题标题】:Returning error string from abl if no match如果不匹配,则从 abl 返回错误字符串
【发布时间】:2018-12-05 06:19:29
【问题描述】:

我正在尝试搜索数据库,然后在找到匹配项时删除记录。然后,如果没有找到匹配项,我想以字符串格式返回错误信息。

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 调用时,这段代码似乎没有返回任何错误。

编辑 1. 找不到匹配项甚至会导致错误,还是您必须以某种方式明确地“抛出”错误?

【问题讨论】:

    标签: progress-4gl


    【解决方案1】:

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

    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.
    

    【讨论】:

    • 如果我理解正确,我实际上不必显式使用 RETURN 语句?我只是重写了输出参数的值,它会被发送回调用者?
    • 是的,您不必使用 RETURN 语句。重写输出参数,并以你想要的方式在调用者中使用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    相关资源
    最近更新 更多