Срабатывание флага COBOL из встроенного SQL-запроса - PullRequest
0 голосов
/ 26 июня 2018

Итак, я только недавно начал писать код в мэйнфреймах, и у меня было очень мало предварительных контактов с коболом. Я пытаюсь проверить историю элемента, чтобы убедиться, что с ним манипулировали, и если им манипулировали, то я хочу установить флаг 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 голосов
/ 26 июня 2018

У вас есть только DECLARED курсор, у вас еще нет OPENED его или вы пытались FETCH что-нибудь из него. Вы не будете знать, соответствуют ли какие-либо строки предикату, пока не будет предпринята попытка FETCH, и тогда вы сможете проверить для SQLCODE +100 (строка не найдена). Потратьте пару минут на GOOGLE для Пример программы COBOL DECLARE, OPEN, FETCH (например: https://www1.columbia.edu/sec/acis/db2/db2a0/db2a020.htm)

Также спросите себя, следует ли вам использовать уровень изоляции UR, и, возможно, задайте вопрос, зачем вам это нужно укажите WITH HOLD на курсоре (требуется только при обработке курсора на нескольких точках фиксации)

0 голосов
/ 26 июня 2018

Могу ли я сделать выборку для курсора, и если он возвращает SQLCODE 100, тогда установить is-empty в true?

Да. Я видел это часто, после открытия курсора.

Я бы предложил, чтобы вместо кодирования, например,

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

... вы код ...

IF MANUAL-ACTION

... так как это больше COBOLish.

...