Roger Strycova
Roger Strycova

Reputation: 109

Calling COBOL/DB2 subprog from COBOL mainprog returns a CEE3204S error from compile unit of subprog

I'm trying to call a COBOL/DB2 subprog from COBOL mainprog. But when run, it returns this error:

CEE3204S The system detected a protection exception (System Completion Code=0C4).
From compile unit ABCDBQUE...

Here's how I called the subprog from mainprog:

       01  WS-HOST-VARIABLES.
           05 WS-ACCT-NO.
              10 WS-REGN-CODE            PIC X(04).
              10 WS-BRANCH-CODE          PIC X(04).
              10 WS-ACCOUNT-NO           PIC X(08).
           05 WS-HOST-ACCT-NO            PIC X(16).
           05 WS-ACCT-STATUS.
              10 WS-DORMANT-STATUS       PIC X(03) VALUE '002'.
              10 WS-CLOSED-STATUS        PIC X(03) VALUE '004'.
       01  WS-DB-QUERY                   PIC X(20).
       01  WS-DB-QUERY-STATUS            PIC X(01).
           88 DB-QUERY-SUCCEEDED         VALUE 'S'.
           88 DB-QUERY-FAILED            VALUE 'F'.
..........
       01  WS-PRT-LINE3.
           05 FILLER                     PIC X(10) VALUE ' REGION:  '.
           05 WS-PRT-REGION-NAME         PIC X(70).
       01  WS-PRT-LINE4.
           05 FILLER                     PIC X(10) VALUE ' BRANCH:  '.
           05 WS-PRT-BRANCH-NAME         PIC X(70).
..........
       0810-GET-REGION-AND-BRANCH.
           MOVE 'GET REGION BRANCH' TO WS-DB-QUERY
           CALL 'ABCDBQUE' USING WS-DB-QUERY
                                 WS-DB-QUERY-STATUS 
                                 WS-REGN-CODE 
                                 WS-BRANCH-CODE 
                                 WS-ACCOUNT-NO 
                                 WS-PRT-REGION-NAME
                                 WS-PRT-BRANCH-NAME.
           EVALUATE TRUE 
               WHEN DB-QUERY-SUCCEEDED
                    DISPLAY 'GET REGION BRANCH SUCCEEDED'
               WHEN DB-QUERY-FAILED
                    DISPLAY 'GET REGION BRANCH FAILED'
           END-EVALUATE.

Here's what my subprog looks like:

       WORKING-STORAGE SECTION.
............
      *
       LINKAGE SECTION. 
       01  LS-DB-QUERY                   PIC X(20).
           88 DB-SELECT-ACCT             VALUE 'INQUIRE DEPTABLE'.
           88 DB-SELECT-REG-BRANCH       VALUE 'GET REGION BRANCH'.
           88 DB-UPDATE                  VALUE 'ACCT STATUS UPDATE'.
       01  LS-DB-QUERY-STATUS            PIC X(01).
           88 DB-QUERY-SUCCEEDED         VALUE 'S'.
           88 DB-QUERY-FAILED            VALUE 'F'.
       01  LS-ACCT-NO.
           05 LS-REGN-CODE               PIC X(04).
           05 LS-BRANCH-CODE             PIC X(04).
           05 LS-ACCOUNT-NO              PIC X(08).
       01  LS-PRT-REGION-NAME            PIC X(70).
       01  LS-PRT-BRANCH-NAME            PIC X(70).
      *
       PROCEDURE DIVISION USING LS-DB-QUERY, 
                                LS-DB-QUERY-STATUS,
                                LS-ACCT-NO,
                                LS-PRT-REGION-NAME,
                                LS-PRT-BRANCH-NAME.
..........

Return code from compiling both programs are all 0. When I didn't separate the subprog from mainprog, it works successfully. But fails when I started to add this Static Calling feature.

Upvotes: 1

Views: 720

Answers (1)

piet.t
piet.t

Reputation: 11911

On the CALL you are passing 7 parameters, but you are only USING 5 - that won't work. The parameter-lists in the calling and called program must be exact matches.

Upvotes: 1

Related Questions