2023-05-03 11:06:20 +02:00
== Why is this an issue?
2021-04-28 16:49:39 +02:00
The number of columns in a ``++FETCH++`` statement should match the number actually selected in the relevant cursor. Use more columns in the ``++FETCH++`` than the cursor, and you've got a data problem, because the variables you expect to be updated by the cursor are never actually touched, and neither are their null indicators. Instead, they retain whatever value they had before the fetch. Meaning you're operating with bad data.
2021-04-28 18:08:03 +02:00
2023-05-03 11:06:20 +02:00
=== Noncompliant code example
2021-04-28 16:49:39 +02:00
2022-02-04 17:28:24 +01:00
[source,cobol]
2021-04-28 16:49:39 +02:00
----
EXEC SQL
DECLARE C-SQL-CURSOR CURSOR
SELECT COLUMN1
,COLUMN2
,COLUMN3
FROM TBLWTABLE
WITH UR
END-EXEC.
…
EXEC SQL
FETCH C-SQL-CURSOR
INTO :H-COLUMN1 :H-COLUMN1-IND -- Noncompliant
,:H-COLUMN2 :H-COLUMN2-IND
,:H-COLUMN3 :H-COLUMN3-IND
,:H-COLUMN4 :H-COLUMN4-IND -- Not selected
,:H-COLUMN5 :H-COLUMN5-IND -- Not selected
----
2021-04-28 18:08:03 +02:00
2023-05-03 11:06:20 +02:00
=== Compliant solution
2021-04-28 16:49:39 +02:00
2022-02-04 17:28:24 +01:00
[source,cobol]
2021-04-28 16:49:39 +02:00
----
EXEC SQL
DECLARE C-SQL-CURSOR CURSOR
SELECT COLUMN1
,COLUMN2
,COLUMN3
,COLUMN4
,COLUMN5
FROM TBLWTABLE
WITH UR
END-EXEC.
…
EXEC SQL
FETCH C-SQL-CURSOR
INTO :H-COLUMN1 :H-COLUMN1-IND
,:H-COLUMN2 :H-COLUMN2-IND
,:H-COLUMN3 :H-COLUMN3-IND
,:H-COLUMN4 :H-COLUMN4-IND
,:H-COLUMN5 :H-COLUMN5-IND
----
or
2022-02-04 17:28:24 +01:00
[source,cobol]
2021-04-28 16:49:39 +02:00
----
EXEC SQL
DECLARE C-SQL-CURSOR CURSOR
SELECT COLUMN1
,COLUMN2
,COLUMN3
FROM TBLWTABLE
WITH UR
END-EXEC.
…
EXEC SQL
FETCH C-SQL-CURSOR
INTO :H-COLUMN1 :H-COLUMN1-IND
,:H-COLUMN2 :H-COLUMN2-IND
,:H-COLUMN3 :H-COLUMN3-IND
----
2021-04-28 18:08:03 +02:00
2021-06-02 20:44:38 +02:00
2021-06-03 09:05:38 +02:00
ifdef::env-github,rspecator-view[]
2021-09-20 15:38:42 +02:00
'''
== Implementation Specification
(visible only on this page)
2023-05-25 14:18:12 +02:00
=== Message
Refactor this ``++FETCH++`` to select the same number of columns selected in "xxx".
=== Highlighting
* primary: ``++INTO++`` + column list in ``++FETCH++`` statement
* secondary: ``++SELECT++`` + column list in cursor
2021-09-20 15:38:42 +02:00
2021-06-08 15:52:13 +02:00
'''
2021-06-02 20:44:38 +02:00
== Comments And Links
(visible only on this page)
2023-05-25 14:18:12 +02:00
=== relates to: S4103
2021-06-03 09:05:38 +02:00
endif::env-github,rspecator-view[]