Pgcobol.cbsql
Jump to navigation
Jump to search
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://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 '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 :DBUSR IDENTIFIED BY :DBPWD USING :DATASRC
GIXSQL* CONNECT TO :DATASRC AS cobol_sql USER :DBUSR USING :DBPWD
GIXSQL* CONNECT TO "pgsql://10.68.171.50:5432/cobol_gixsql"
GIXSQL* 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