!! 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 ...


%%prettify 
{{{
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 !)
%%prettify 
{{{
         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 !