条件の 1 つが常に同じで、もう 1 つの条件が 1 ~ 13 の値を持つデータベースからデータを取得しています。クエリは、値ごとに 1 回、13 回実行する必要があります。
SELECT
すべてがコンパイルされますが、出力を見ると、ステートメントからデータを取得するために使用される値がまったく値を保持していないことに気付きます。WHERE
SQL Server Management Studio でハードコードされたステートメントを使用してまったく同じクエリを実行すると、期待どおりにデータが取得されます。SQLCODE
私が受け取るのは100
です。
ループを省略しPERFORM VARYING
てクエリにハードコーディングされたデータを与えると、フィールドQUESTION-CODE
とANSWER-CODE
フィールドには正しいデータが含まれますが、AMOUNT
最初は空で、次にゼロになります。
SQL Server 2012 で OpenCobol コンパイラを使用しています。
私は何を見落としていますか?
01 WS-FIELDS.
05 I PIC 9(2).
01 WS-EVALUATION.
05 QUESTION-CODE PIC 9(3).
05 ANSWER-CODE PIC 9(3).
01 WS-RESULT.
05 OV PIC 9(3).
05 V PIC 9(3).
05 G PIC 9(3).
05 ZG PIC 9(3).
05 NVT PIC 9(3).
05 AMOUNT PIC 9(3).
LINKAGE SECTION.
01 ROUTE-CODE PIC X(10) VALUE SPACES.
EXEC SQL
DECLARE crs
CURSOR FOR
SELECT QuestionCode, AnswerCode, COUNT(AnswerCode)
FROM Answers
WHERE Route = :ROUTE-CODE AND QuestionCode= :I
GROUP BY QuestionCode, AnswerCode
END-EXEC
EXEC SQL
OPEN crs
END-EXEC
PERFORM UNTIL SQLCODE <> 0
PERFORM VARYING I FROM 1 BY 1 UNTIL I = 13
EXEC SQL
FETCH crs INTO :QUESTION-CODE, :ANSWER-CODE, AMOUNT
END-EXEC
IF SQLCODE = 0
EVALUATE TRUE
WHEN ANSWER-CODE = 1
MOVE AMOUNT TO OV
WHEN ANSWER-CODE = 2
MOVE AMOUNT TO V
WHEN ANSWER-CODE = 3
MOVE AMOUNT TO G
WHEN ANSWER-CODE = 4
MOVE AMOUNT TO ZG
WHEN ANSWER-CODE = 5
MOVE AMOUNT TO NVT
WHEN OTHER
DISPLAY "Error" UPON SYSOUT
END-EVALUATE
END-IF
END-PERFORM
END-PERFORM
.