从嵌入式SQL查询中触发COBOL标志

时间:2018-06-26 15:35:02

标签: sql cobol

因此,我最近才开始在大型机中进行编码,之前与cobol接触很少。我正在尝试检查项目的历史记录,以查看它是否已被操纵,如果它已被操纵,那么我想将COBOL标志设置为TRUE,以防止正在运行的程序运行。

我现在正在使用的是:

05  HV-ACTION-SW                PIC X(01)
    88 DO-ACTION                VALUE 'Y'
05  HV-HIST-EMPTY               PIC X(01)
    88 IS-EMPTY                 VALUE 'Y'
05  HV-MANUAL-OVRRD-SW          PIC X(01).   
    88 MANUAL-ACTION            VALUE 'Y'.

EXEC SQL
    DECLARE HIST_CHECK CURSOR WITH HOLD FOR
    SELECT DISTINCT
        LOG.ORD_I AS Order_Number
        ,LOG.CLL_TYP AS Order_Status
    FROM
        ALI.CMN_LOG         LOG
    WHERE 1=1
        AND LOG.ORD_I                   = :HV-ORD-I
        AND LOG.CLL_TYP                 = 'EMPTY'
    WITH UR
END-EXEC

IF HV-MANUAL-OVRRD-SW = 'Y' THEN
    SET DO-ACTION TO TRUE
ELSE
    IF CODE THEN
        **This is where I'd like to insert a check on the cursor to see if it's null, and
        if it's NOT null then I'd like to SET IS-EMPTY TO TRUE.**
        IF HV-HIST-EMPTY = 'Y' THEN
            CONTINUE
        ELSE
            SET DO-ACTION   TO TRUE
        END-IF
    ELSE
        SET DO-ACTION       TO TRUE
    END-IF
END-IF

编辑:我可以在游标上进行访存,如果返回SQLCODE 100,则将is-empty设置为true吗?

2 个答案:

答案 0 :(得分:2)

  

我可以对游标进行提取,如果它返回SQLCODE 100,那么   将isempty设置为true吗?

是的。当然,打开游标后,我经常看到它。

我建议您不要编码例如

IF HV-MANUAL-OVRRD-SW = 'Y'

...您编码...

IF MANUAL-ACTION

...更多COBOLish。

答案 1 :(得分:2)

您只有DECLARED个游标,尚未OPENED游标,或试图FETCH游标。 在尝试FETCH之前,您不会知道是否有任何行与谓词匹配,此时您可以检查 对于SQLCODE +100(找不到行)。花几分钟去GOOGLE COBOL DECLARE,OPEN,FETCH示例程序(例如:https://www1.columbia.edu/sec/acis/db2/db2a0/db2a020.htm

还要问自己,是否应该使用隔离级别UR,并可能会问为什么需要这样做 在光标上指定WITH HOLD(仅当在多个提交点上处理光标时才需要)