因此,我最近才开始在大型机中进行编码,之前与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吗?
答案 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
(仅当在多个提交点上处理光标时才需要)