Programma COBOL

Navigation:  DATABASE > PostgreSQL > Programmazione verso PostgreSQL > Preparazione di una Programma COBOL vs Tabella Postgresql >

Programma COBOL

Previous pageReturn to chapter overviewNext page

Esempi di programmi sono gli sw*.cbl in p:\eurocoge ed i bie*.cbl in ambiente p:\eurocoge\cap\cbl.

 

Nella input-output section.

             file-control.      

  occorre indicare la .fd della tabella:
 copy "nometabella.fd"
 

Nella data division.

             file section.

 

     occorre indicare la cpy della tabella interessata con relativa direttiva XFD:
 

      $xfd file=nometabella

       fd  nometabella

           label record standard.

           copy "nometabella.cpy".
 

Nella data division.
       working-storage section.
se non esistono già, occorre poi inserire:
     

       78 k-ver-nometabella           value 1.
 

       01  w-nomi-bin.

         02 w-nome-nometabella           pic x(70).

 
      *--> sql-start: cambia ed aggiungi

       01  tab-config.

         02 tm-cfg-bin-tipo        pic x(01).

         02 tm-cfg-bin-path        pic x(80).

         02 tm-cfg-bin-conn-string-idx pic 9(03).

         02 tm-cfg-bin-conn-string occurs 3 pic x(80).

         02 tm-cfg-bin-log-level   pic 9(02).

         02 tm-cfg-attiva-areaapp  pic x(01).

         02 tm-cfg-cod-azienda     pic x(06).

      *--> sql-end

 
        copy "sql-decla-ws.cpy".

        copy "nometabella-sql-ws.cpy".

 

La prima .cpy è generica e se il programma è già interfacciato con postgres sarà già presente
Quest'ultima copy se la tabella è nuova sarà da asteriscare per poter eseguire la prima compilazione (che genera anche l'xfd)
 

Nella data division.
       procedure-division.
       main section.
 
 

  ...ad inizio programma...
   
      move wo-parametro       to w-sql-parametro
 

   questo pezzo di codice fa sì che lanciando il programma creato con wo-parametro = "5" tutte le tabelle DB presenti nel programma vengano cancellate e ricreate nella loro definizione (campi, chiavi, condizioni) i questo caso tutti i dati presenti verranno persi.
 
   

prima della "a4"
 
        initialize w-nomi-bin

          initialize w-bin-slash

          perform init-bin-sub-tm-cfg-bin-tipo

 

praticamente è l'apertura delle tabelle sul DB.

 

nella "z-chiudi".
 
       perform close-bin-sub-tm-cfg-bin-tipo
 

tutte le varie chiamate rd-... st-..., wr-... rwr-..., del-.... già note allo sviluppatore dall'uso delle ".k01" devono essere rimpiazzate o scritte nella forma sostitutiva:
 
sub-cfg-nomeperform....
 
es.
perform sub-cfg-wr-arpintes
 
in questo modo a seconda della configurazione verranno eseguite o le chimate al DB o ai files COBOL.
 

la perform speciale:
 
          perform sql-truncate-nometabella
 
esegue la cancellazione immediata di tutti i dati presenti nella tabella senza però toccarne la struttura logica. Questa cancellazione è molto più performante di un ciclo:
start...
read next ...
perform until (w-fine-file)
 delete record
 read next ...
loop
 

è anche possibile implementare cancellazioni/aggiornamenti personalizzati con SQL quasi diretto
(es. SWC011 cercare "delete-where-x").
 
 

in una "x99-..." di ricerca configurazione inserire la ricerca dei parametri di connessione (=apertura files) del DB
 
es.
        move "areaapp"                to ncnf-gruppo (03)

           move "db-conn-string"         to ncnf-chiave (03)

           move 1                        to ncnf-idx    (03)

 

           move "areaapp"                to ncnf-gruppo (04)

           move "db-conn-string"         to ncnf-chiave (04)

           move 2                        to ncnf-idx    (04)

 

           move "areaapp"                to ncnf-gruppo (05)

           move "db-conn-string"         to ncnf-chiave (05)

           move 3                        to ncnf-idx    (05)

 

           move "areaapp"                to ncnf-gruppo (06)

           move "db-log-level"           to ncnf-chiave (06)

 
           call "RNEWCONF" using stringhe util-ncnf ncnf-tab

           cancel "RNEWCONF"

 

           move ncnf-valore   (03)       to tm-cfg-bin-conn-string (1)

           if (tm-cfg-bin-conn-string (1) = low-values)

              move spaces                to tm-cfg-bin-conn-string (1)

           end-if

           move ncnf-valore   (04)       to tm-cfg-bin-conn-string (2)

           if (tm-cfg-bin-conn-string (2) = low-values)

              move spaces                to tm-cfg-bin-conn-string (2)

           end-if

           move ncnf-valore   (05)       to tm-cfg-bin-conn-string (3)

           if (tm-cfg-bin-conn-string (3) = low-values)

              move spaces                to tm-cfg-bin-conn-string (3)

           end-if

 

           move ncnf-valore-n (06)       to tm-cfg-bin-log-level

 
notare che il tm-cfg-bin-log-level rappresenta il livello di log che viene richiesto al runtime quando s'interfaccia con il database. Livelli validi sono da 0 (nessun log) fino al 5 (loggo tutto) passando per i sottolivelli (il livello superiore implica tutto quanto loggato nei livelli sottostanti):
0= nessun log
1= loggo solo gli errori

2= loggo le funzionalità di base

3= loggo i risultati delle funzionalità di base

4= loggo anche i cicli di alcune  funzionalità interne ed i relativi valori in entrata ed uscita dal runtime

5= loggo tutto quello che è implementato
 

nel caso vengango loggati gli errori verranno anche scritti i 100 messaggi di log (a tutti i livelli) precedenti l'errore.

 

all'interno del programma dovranno essere inserite:
 le due perform
 

      ***************************************************************

      *** apertura sub tipo database

      ***************************************************************

       init-bin-sub-tm-cfg-bin-tipo.

           move k-yes              to sql-init-ok

           move tm-cfg-bin-log-level          to w-sql-log-level

           move tm-cfg-bin-conn-string (1)    to w-sql-conn1

           move tm-cfg-bin-conn-string (2)    to w-sql-conn2

           move tm-cfg-bin-conn-string (3)    to w-sql-conn3

           perform sql-init

 

           move w-sql-parametro              to sql-issue-create

           perform sub-cfg-bin-open-nometabella

 

            .

       close-bin-sub-tm-cfg-bin-tipo.

           perform sql-exit

          .

alla fine del programma inserire le .cpy
 
  copy "sql-interface-prc.cpy".

     copy "nometabella-sql-prc.cpy".

 
dove la prima sql-interface-prc.cpy è generica e se il programma è già interfacciato con il DB sarà già presente.

 

compilare il programma

al momento attuale i programmi destinati alle App posso essere provati sull'ambiente Endonova: 
questo è interfacciato con il server KPN su un DB di prova che si chiama 
 
test_c00000