Pgcobol.cbl

From PostgreSQL_wiki
Jump to: navigation, search

This is the compplete source code of the Cobol program, which contains the high level SQL statements.

       IDENTIFICATION DIVISION.

       PROGRAM-ID. pgcobol.


       ENVIRONMENT DIVISION.

       CONFIGURATION SECTION.
       source-computer. Linux-laptop.
       object-computer. Linux-laptop.
       special-names.
           console is scherm.

       SOURCE-COMPUTER. IBM-AT.
       OBJECT-COMPUTER. IBM-AT.

       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
         select fprinter assign to "pgcobol.prt";
         ORGANIZATION LINE SEQUENTIAL.
       DATA DIVISION.

       FILE SECTION.
       FD fprinter.
       01 file-buffer PIC X(242).
       WORKING-STORAGE SECTION.

      *   copy 'SQLCA.cpy'.
      *   copy 'EMPREC.cpy'.

       01 DATASRC PIC X(64) value
      *   "pgsql://10.68.171.50:5432".
      *   "pgsql://10.68.171.50:5432/cobol_gixsql".
          "pgsql://localhost:5432/cobol_gixsql".
       01 DBUSR     PIC X(64)  value "gix_user".
       01 DBPWD     PIC X(64)  value "gix_user".

       01 CUR-STEP    PIC X(16).
       01 empcount    PIC 9(5).
       01 employee-record.
           03 r-ENO PIC S9(4) COMP.
           03 r-LNAME PIC X(10).
           03 r-FNAME PIC X(10).
           03 r-STREET PIC X(20).
           03 r-CITY PIC X(15).
           03 r-ST PIC XX.
           03 r-ZIP PIC X(5).
           03 r-DEPT PIC X(4).
      *    03 a-PAYRATE PIC S9(13)V99 COMP-3 VALUE 0.
           03 r-PAYRATE PIC S9(13)V99 COMP-3 VALUE 0.
           03 r-COM PIC S9V99 COMP-3.
           03 r-MISCDATA PIC X(132).
           03 r-DNUM1 PIC S99V99 COMP-3.
           03 r-DNUM2 PIC S99V99 COMP-3.
           03 r-DNUM3 PIC S99V99 COMP-3.

       01 employee-row.
           03 p-ENO PIC z(3)9.
           03 filler pic x value space.
           03 p-LNAME PIC X(10).
           03 filler pic x value space.
           03 p-FNAME PIC X(10).
           03 filler pic x value space.
           03 p-STREET PIC X(20).
           03 filler pic x value space.
           03 p-CITY PIC X(15).
           03 filler pic x value space.
           03 p-ST PIC XX.
           03 filler pic x value space.
           03 p-ZIP PIC X(5).
           03 filler pic x value space.
           03 p-DEPT PIC X(4).
           03 filler pic x value space.
           03 p-PAYRATE PIC z(12)9.99.
           03 filler pic x value space.
           03 p-COM PIC 9v99.
           03 filler pic x value space.
           03 p-DNUM1 PIC z9.99.
           03 filler pic x value space.
           03 p-DNUM2 PIC z9.99.
           03 filler pic x value space.
           03 p-DNUM3 PIC z9.99.
           03 filler pic x value space.
           03 p-miscdata-text pic X(128).

       01 employee-header.
           03 h-ENO pic x(5) value 'Eno'.
           03 h-LNAME PIC X(11) value 'Lname'.
           03 h-FNAME PIC X(11) value 'Fname'.
           03 h-STREET PIC X(21) value space.
           03 h-CITY PIC X(16) value 'City'.
           03 h-ST PIC X(3) value 'ST'.
           03 h-ZIP PIC X(6) value 'zip'.
           03 h-DEPT PIC X(5) value 'Dept'.
           03 h-PAYRATE PIC x(17) value 'Payrate'.
           03 h-COM PIC x(4) value 'Com'.
           03 h-DNUM1 PIC x(6) value 'Dnum1'.
           03 h-DNUM2 PIC x(6) value 'Dnum1'.
           03 h-DNUM3 PIC x(6) value 'Dnum1'.
           03 h-miscdata-text pic X(128) value 'Misc data'.

       01 employee-page.
           03 filler pic x(118) value space.
           03 filler pic x(10) value 'page'.
           03 f-page-number PIC z(3)9.

      *01 MISCDATA PIC X(132).

       01 miscdata-group.
           49 miscdata-len pic 9(8) comp-5.
           49 miscdata-text pic X(128).

       01 IDX              PIC 9(2).
       01 print-buffer     PIC X(242).
       01 line-number      PIC 99 value 99.
       01 page-number      PIC 9999 value zero.

       01 TMPNUM          PIC 9(4).

       EXEC SQL
           INCLUDE employee-table
       END-EXEC.

       EXEC SQL
           INCLUDE SQLCA
       END-EXEC.

       EXEC SQL AT cobol_sql
           DECLARE employeecursor CURSOR FOR
             SELECT * FROM emptable
       END-EXEC.

       PROCEDURE DIVISION.

       r00-main.

           perform r90-init.
           perform r80-verwerk.
           perform r99-exit.

       r80-verwerk.

           EXEC SQL AT cobol_sql
               SELECT COUNT(*) INTO :empcount FROM emptable
           END-EXEC.

           display "Rijen in emptable" upon scherm.
           display empcount upon scherm.

           perform r81-init-cursor.

           perform r85-verwerk-employee until
                   SQLCODE < 0 or SQLCODE = 100

           perform r89-close-cursor.

       r81-init-cursor.

           EXEC SQL AT cobol_sql START TRANSACTION END-EXEC.
           display "start transaction" upon scherm.
           display SQLCODE upon scherm.

           EXEC SQL OPEN employeecursor END-EXEC.

           display "open cursor" upon scherm.
           display SQLCODE upon scherm.

           EXEC SQL FETCH employeecursor INTO :employee-table END-EXEC.

           display "fetch cursor" upon scherm.
           display SQLCODE upon scherm.

       r85-verwerk-employee.

           move ENO to r-ENO.
           move LNAME to r-LNAME.
           move FNAME to r-FNAME.
           move STREET to r-STREET.
           move CITY to r-CITY.
           move ST to r-ST.
           move ZIP to r-ZIP.
           move DEPT to r-DEPT.
           move PAYRATE to r-PAYRATE.
           move COM to r-COM.
           move DNUM1 to r-DNUM1.
           move DNUM2 to r-DNUM2.
           move DNUM3 to r-DNUM3.
           move MISCDATA to miscdata-group.
      *    move miscdata-len to r-miscdata-len.
      *    move miscdata-text to r-miscdata-text.

           move r-ENO to p-ENO.
           move r-LNAME to p-LNAME.
           move r-FNAME to p-FNAME.
           move r-STREET to p-STREET.
           move r-CITY to p-CITY.
           move r-ST to p-ST.
           move r-ZIP to p-ZIP.
           move r-DEPT to p-DEPT.
           move r-PAYRATE to p-PAYRATE.
           move r-COM to p-COM.
           move r-DNUM1 to p-DNUM1.
           move r-DNUM2 to p-DNUM2.
           move r-DNUM3 to p-DNUM3.
           move miscdata-text to p-miscdata-text.

           display employee-row upon scherm.
           perform p00-print.

           EXEC SQL FETCH employeecursor INTO :employee-table END-EXEC.

           display "fetch cursor" upon scherm.
           display SQLCODE upon scherm.

       r89-close-cursor.

           EXEC SQL CLOSE employeecursor END-EXEC.

       r90-init.
           perform s00-connect.
           open output fprinter.

       r99-exit.

           perform s99-disconnect.
           close fprinter.
           perform z99-exit.

       z99-exit.

           stop run.

       s00-connect.
           display "DATASRC" upon scherm.
           display "DBUSR" upon scherm.
           display "DBPWD" upon scherm.

           MOVE 'CONNECT' TO CUR-STEP.
           EXEC SQL
      *       CONNECT :DBUSR IDENTIFIED BY :DBPWD USING :DATASRC
              CONNECT TO :DATASRC AS cobol_sql USER :DBUSR USING :DBPWD
      *       CONNECT TO "pgsql://10.68.171.50:5432/cobol_gixsql"
      *                USER :DBUSR USING :DBPWD
           END-EXEC.
           display "connect to database" upon scherm.
           display SQLCODE upon scherm.

       s99-disconnect.
           display "DATASRC" upon scherm.
           display "DBUSR" upon scherm.
           display "DBPWD" upon scherm.

           MOVE 'DISCONNECT' TO CUR-STEP.
           EXEC SQL CONNECT RESET cobol_sql END-EXEC.
           EXEC SQL DISCONNECT cobol_sql END-EXEC.
           display "disconnect from database" upon scherm.
           display SQLCODE upon scherm.

       p00-print.
           if line-number > 50 then
             move 1 to line-number 
             add 1 to page-number 
             move page-number to f-page-number
             move employee-page to print-buffer
             write file-buffer from print-buffer
             move employee-header to print-buffer
             write file-buffer from print-buffer
             move employee-row to print-buffer
             write file-buffer from print-buffer
           else
             add 1 to page-number 
             move employee-row to print-buffer
             write file-buffer from print-buffer.

       999-PRG-ERR.
           display 'ERR - ' CUR-STEP ' : ' SQLCODE.
           display 'ERR - ' CUR-STEP ' : ' SQLERRMC(1:SQLERRML).
           MOVE -1 TO RETURN-CODE.


Terug naar: Cobol and PostgreSQL