0

条件の 1 つが常に同じで、もう 1 つの条件が 1 ~ 13 の値を持つデータベースからデータを取得しています。クエリは、値ごとに 1 回、13 回実行する必要があります。

SELECTすべてがコンパイルされますが、出力を見ると、ステートメントからデータを取得するために使用される値がまったく値を保持していないことに気付きます。WHERESQL Server Management Studio でハードコードされたステートメントを使用してまったく同じクエリを実行すると、期待どおりにデータが取得されます。SQLCODE私が受け取るのは100です。

ループを省略しPERFORM VARYINGてクエリにハードコーディングされたデータを与えると、フィールドQUESTION-CODEANSWER-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
   .     
4

1 に答える 1