Pgcobol.cbsql
GixSQL precompilation
The gixsql precompiler precesses the raw cobol file containing the high level SQL statements and translates them into cobol calls.
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://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 'Employee overview'.
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).
GIXSQL*EXEC SQL
GIXSQL* INCLUDE employee-table
GIXSQL*END-EXEC.
COPY employee-table.
GIXSQL*EXEC SQL
GIXSQL* INCLUDE SQLCA
GIXSQL*END-EXEC.
COPY SQLCA.
GIXSQL*EXEC SQL AT cobol_sql
GIXSQL* DECLARE employeecursor CURSOR FOR
GIXSQL* SELECT * FROM emptable
GIXSQL*END-EXEC.
GIXSQL 01 SQ0001.
GIXSQL 02 FILLER PIC X(0022) VALUE "SELECT * FROM emptable".
GIXSQL 02 FILLER PIC X(1) VALUE X"00".
GIXSQL 01 SQ0002.
GIXSQL 02 FILLER PIC X(0031) VALUE "SELECT COUNT( * ) FROM emptab"
GIXSQL & "le".
GIXSQL 02 FILLER PIC X(1) VALUE X"00".
GIXSQL 01 SQ0003.
GIXSQL 02 FILLER PIC X(0017) VALUE "START TRANSACTION".
GIXSQL 02 FILLER PIC X(1) VALUE X"00".
GIXSQL* ESQL CURSOR INIT FLAGS (START)
GIXSQL 01 GIXSQL-CI-F-pgcobol-employeecursor PIC X.
GIXSQL* ESQL CURSOR INIT FLAGS (END)
PROCEDURE DIVISION.
r00-main.
perform r90-init.
perform r80-verwerk.
perform r99-exit.
r80-verwerk.
GIXSQL* EXEC SQL AT cobol_sql
GIXSQL* SELECT COUNT(*) INTO :empcount FROM emptable
GIXSQL* END-EXEC.
GIXSQL CALL STATIC "GIXSQLStartSQL"
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 1
GIXSQL BY VALUE 5
GIXSQL BY VALUE 0
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE empcount
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLExecSelectIntoOne" USING
GIXSQL BY REFERENCE SQLCA
GIXSQL BY REFERENCE "cobol_sql" & x"00"
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE SQ0002
GIXSQL BY VALUE 0
GIXSQL BY VALUE 1
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLEndSQL"
GIXSQL END-CALL.
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.
GIXSQL* EXEC SQL AT cobol_sql START TRANSACTION END-EXEC.
GIXSQL CALL STATIC "GIXSQLStartSQL"
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLExec" USING
GIXSQL BY REFERENCE SQLCA
GIXSQL BY REFERENCE "cobol_sql" & x"00"
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE SQ0003
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLEndSQL"
GIXSQL END-CALL.
display "start transaction" upon scherm.
display SQLCODE upon scherm.
GIXSQL* EXEC SQL OPEN employeecursor END-EXEC.
GIXSQL IF GIXSQL-CI-F-pgcobol-employeecursor = ' ' THEN
GIXSQL PERFORM GIXSQL-CI-P-pgcobol-employeecursor
GIXSQL IF SQLCODE = 0
GIXSQL MOVE 'X' TO GIXSQL-CI-F-pgcobol-employeecursor
GIXSQL END-IF
GIXSQL END-IF
GIXSQL IF GIXSQL-CI-F-pgcobol-employeecursor = 'X' THEN
GIXSQL CALL STATIC "GIXSQLCursorOpen" USING
GIXSQL BY REFERENCE SQLCA
GIXSQL BY REFERENCE "pgcobol_employeecursor" & x"00"
GIXSQL END-CALL
GIXSQL END-IF.
display "open cursor" upon scherm.
display SQLCODE upon scherm.
GIXSQL* EXEC SQL FETCH employeecursor INTO :employee-table END-EXEC.
GIXSQL CALL STATIC "GIXSQLStartSQL"
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 23
GIXSQL BY VALUE 4
GIXSQL BY VALUE 0
GIXSQL BY VALUE 256
GIXSQL BY REFERENCE ENO
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 16
GIXSQL BY VALUE 10
GIXSQL BY VALUE 0
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE LNAME
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 16
GIXSQL BY VALUE 10
GIXSQL BY VALUE 0
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE FNAME
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 16
GIXSQL BY VALUE 20
GIXSQL BY VALUE 0
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE STREET
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 16
GIXSQL BY VALUE 15
GIXSQL BY VALUE 0
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE CITY
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 16
GIXSQL BY VALUE 2
GIXSQL BY VALUE 0
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE ST
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 16
GIXSQL BY VALUE 5
GIXSQL BY VALUE 0
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE ZIP
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 16
GIXSQL BY VALUE 4
GIXSQL BY VALUE 0
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE DEPT
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 9
GIXSQL BY VALUE 15
GIXSQL BY VALUE -2
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE PAYRATE
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 9
GIXSQL BY VALUE 3
GIXSQL BY VALUE -2
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE COM
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 16
GIXSQL BY VALUE 132
GIXSQL BY VALUE 0
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE MISCDATA
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 9
GIXSQL BY VALUE 4
GIXSQL BY VALUE -2
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE DNUM1
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 9
GIXSQL BY VALUE 4
GIXSQL BY VALUE -2
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE DNUM2
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 9
GIXSQL BY VALUE 4
GIXSQL BY VALUE -2
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE DNUM3
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLCursorFetchOne" USING
GIXSQL BY REFERENCE SQLCA
GIXSQL BY REFERENCE "pgcobol_employeecursor" & x"00"
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLEndSQL"
GIXSQL END-CALL.
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.
GIXSQL* EXEC SQL FETCH employeecursor INTO :employee-table END-EXEC.
GIXSQL CALL STATIC "GIXSQLStartSQL"
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 23
GIXSQL BY VALUE 4
GIXSQL BY VALUE 0
GIXSQL BY VALUE 256
GIXSQL BY REFERENCE ENO
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 16
GIXSQL BY VALUE 10
GIXSQL BY VALUE 0
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE LNAME
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 16
GIXSQL BY VALUE 10
GIXSQL BY VALUE 0
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE FNAME
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 16
GIXSQL BY VALUE 20
GIXSQL BY VALUE 0
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE STREET
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 16
GIXSQL BY VALUE 15
GIXSQL BY VALUE 0
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE CITY
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 16
GIXSQL BY VALUE 2
GIXSQL BY VALUE 0
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE ST
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 16
GIXSQL BY VALUE 5
GIXSQL BY VALUE 0
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE ZIP
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 16
GIXSQL BY VALUE 4
GIXSQL BY VALUE 0
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE DEPT
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 9
GIXSQL BY VALUE 15
GIXSQL BY VALUE -2
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE PAYRATE
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 9
GIXSQL BY VALUE 3
GIXSQL BY VALUE -2
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE COM
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 16
GIXSQL BY VALUE 132
GIXSQL BY VALUE 0
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE MISCDATA
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 9
GIXSQL BY VALUE 4
GIXSQL BY VALUE -2
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE DNUM1
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 9
GIXSQL BY VALUE 4
GIXSQL BY VALUE -2
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE DNUM2
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 9
GIXSQL BY VALUE 4
GIXSQL BY VALUE -2
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE DNUM3
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLCursorFetchOne" USING
GIXSQL BY REFERENCE SQLCA
GIXSQL BY REFERENCE "pgcobol_employeecursor" & x"00"
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLEndSQL"
GIXSQL END-CALL.
display "fetch cursor" upon scherm.
display SQLCODE upon scherm.
r89-close-cursor.
GIXSQL* EXEC SQL CLOSE employeecursor END-EXEC.
GIXSQL CALL STATIC "GIXSQLCursorClose" USING
GIXSQL BY REFERENCE SQLCA
GIXSQL BY REFERENCE "pgcobol_employeecursor" & x"00"
GIXSQL END-CALL.
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.
GIXSQL* EXEC SQL
GIXSQL* CONNECT TO :DATASRC AS cobol_sql USER :DBUSR USING :DBPWD
GIXSQL* END-EXEC.
GIXSQL CALL STATIC "GIXSQLConnect" USING
GIXSQL BY REFERENCE SQLCA
GIXSQL BY REFERENCE DATASRC
GIXSQL BY VALUE 64
GIXSQL BY REFERENCE "cobol_sql" & x"00"
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE x"00"
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE DBUSR
GIXSQL BY VALUE 64
GIXSQL BY REFERENCE DBPWD
GIXSQL BY VALUE 64
GIXSQL END-CALL.
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.
GIXSQL* EXEC SQL CONNECT RESET cobol_sql END-EXEC.
GIXSQL CALL STATIC "GIXSQLConnectReset" USING
GIXSQL BY REFERENCE SQLCA
GIXSQL BY REFERENCE "cobol_sql" & x"00"
GIXSQL BY VALUE 0
GIXSQL END-CALL.
GIXSQL* EXEC SQL DISCONNECT cobol_sql END-EXEC.
GIXSQL CALL STATIC "GIXSQLConnectReset" USING
GIXSQL BY REFERENCE SQLCA
GIXSQL BY REFERENCE "cobol_sql" & x"00"
GIXSQL BY VALUE 0
GIXSQL END-CALL.
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.
GIXSQL*
GIXSQL* ESQL CURSOR DECLARATIONS (START)
GIXSQL GO TO GIX-SKIP-CRSR-INIT.
GIXSQL GIXSQL-CI-P-pgcobol-employeecursor.
GIXSQL CALL STATIC "GIXSQLCursorDeclare" USING
GIXSQL BY REFERENCE SQLCA
GIXSQL BY REFERENCE "cobol_sql" & x"00"
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE "pgcobol_employeecursor" & x"00"
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE SQ0001
GIXSQL BY VALUE 0
GIXSQL END-CALL.
GIXSQL GIX-SKIP-CRSR-INIT.
GIXSQL*
GIXSQL* ESQL CURSOR DECLARATIONS (END)
Back to: Cobol and PostgreSQL