Leggere un database da un sistema non Iseries !!#

In questo esempio vediamo come da un programma RPG con SQL Embedded leggiamo un Database DB2 residente su un sistema Linux nella rete locale dell'azienda:

Creare una connessione al DB nel DRDA !!#

ADDRDBDIRE RDB(MIODB MIODB) RMTLOCNAME('192.168.X.X' *IP) TEXT('Collegam ento a DB su Linux') PORT(XXXX) RMTAUTMTH(*USRIDPWD)

Prestare attenzione la CSID !!#

Per i sistemi Linux modificare il CCSID del Job a 280 con il comando CHGJOB CCSID(280)

Creare il programma SQLRPLE !!#

Riporto qui sotto un esempio di programma molto semplice ...

D DSTAB           DS                                     
D CAMPO1                         35                       
D CAMPO2                         15                       
C*                                                                           
C                   EVAL      $CMD='CHGJOB CCSID(280)'                       
C                   CALL      'QCMDEXC'                                      
C                   PARM                    $CMD            100              
C                   PARM      100           NNN155           15 5            
C*                                                                           
C                   MOVEL     'MIODB'       RMTDB            20              
C                   MOVEL     'MIOUSER'     RMTUSER          20              
C                   MOVEL     'MIAPASSW'    RMTPWD           20              
C*... Esecuzione SQL di connessione al DB Remoto                                            
C/EXEC SQL                                                      
C+ CONNECT TO :RMTDB USER :RMTUSER USING :RMTPWD                
C/END-EXEC                                      
*.... Preparo la mia stringa di select costruita come voglio                
C                   CLEAR                   CMDSQL2         500               
C                   EVAL      CMDSQL2='SELECT * FROM miatabella'           
 *.... Eseguo la preparazione,la select                                                                            
C/EXEC SQL                                                                    
C+ PREPARE CMDSQL2 FROM: CMDSQL2                                              
C/END-EXEC                                                                    
C/EXEC SQL DECLARE C1 CURSOR FOR CMDSQL2                                      
C/END-EXEC                                                                    
C/EXEC SQL OPEN C1                                                            
C/END-EXEC                       
 *... Eseguo un ciclo di Fetch                                             
C                   DO        *HIVAL                                          
C/EXEC SQL FETCH C1 into  :DSTAB                                                     
C/END-EXEC                                                                           
C                   SELECT                                                           
C                   WHEN      SQLCODE=100                                  EOF       
C/EXEC SQL CLOSE C1                                                                  
C/END-EXEC                                                                           
C                   LEAVE                                                            
C                   WHEN      SQLCODE<0                                    ERRORE    
C/EXEC SQL CLOSE C1                                                                  
C/END-EXEC                      
C                   EVAL      £DMSAZ='1'                                                
C                   EVAL      £DMSTI='INFO'                                             
C                   EVAL      £DMSME=''                                                 
C                   EVAL      £DMSFI=''                                                 
C                   EVAL      £DMSTE='Errore SQL ' +%EDITC(SQLCODE:'J')                 
C                   EXSR      £DMSG                                                     
C                   OTHER                                                               
C                   EXSR      ELAREC                                       Elabor. record letto
C                   ENDSL                                
C*                                                       
C                   ENDDO                                

Compilazione del programma : Attenzione qui !!#

La compilazione del programma SQLRPG è un po' particolare perchè necessita della creazione del pacchetto sql e di alcuni parametri particolari per la connessione a DB non Iseries ... per comodità ho messo una sequenza di istruzioni in un CL di compilazione (da migliorare naturalmente, ma per ora funziona !). Altra cosa particolare che per ora non ho capito ... tutte le volte che voglio ricompilare il programma e ricreare il pacchetto sql devo scollegarmi e ricollegarmi ... c'e' qualcosa che rimane aperto ma non ho capito ... Se qualcuno lo scopre che lo scriva qui per cortesia ...
         PGM                                                             
             CHGJOB     CCSID(280)                                       
             CRTSQLRPGI OBJ(mialib/miopgm) SRCFILE(mialib/SRC) +      
                          COMMIT(*CS) RDB(*LOCAL) USER(*CURRENT) +       
                          OPTION(*SQL) ALWCPYDTA(*NO) DATFMT(*ISO)       
             CRTSQLPKG  PGM(miopgm) RDB(miodb) USER(miouser) +        
                          PASSWORD(miapassw)                               
         ENDPGM                                                          

In questo modo non ho errori e riesco ad elaborare il file remoto dal mio RPG ... Wow !

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-3) was last changed on 14-Apr-2010 14:30 by Roberto De Pedrini