This is version . It is not the current version, and thus it cannot be edited.
[Back to current version]   [Restore this version]

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 !)
         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 particular version was published on 14-Apr-2010 14:30 by Roberto De Pedrini.