所以我最近刚开始在大型机上编程,之前接触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编辑:是否可以在游标上执行fetch操作,如果它返回SQLCODE 100,则将is-empty设置为true?
发布于 2018-06-27 02:45:04
是否可以在游标上执行fetch操作,如果它返回SQLCODE100,则将is-
设置为true?
是。我经常看到这样做,当然是在打开光标之后。
我的建议是,不要编码,例如:
IF HV-MANUAL-OVRRD-SW = 'Y'...you代码...
IF MANUAL-ACTION这更像是COBOLish。
发布于 2018-06-27 02:45:59
您只对游标执行了DECLARED操作,而尚未对其执行OPENED操作或尝试对其执行FETCH操作。在尝试执行FETCH之前,您将不知道是否有任何行与该谓词匹配,此时您可以检查SQLCODE +100 (未找到行)。花几分钟时间到谷歌获取一个COBOL DECLARE,OPEN,FETCH示例程序(例如:https://www1.columbia.edu/sec/acis/db2/db2a0/db2a020.htm)
还要问问自己是否应该使用UR的隔离级别,并可能会问为什么需要在游标上指定WITH HOLD (只有在处理多个提交点上的游标时才需要)
https://stackoverflow.com/questions/51046657
复制相似问题