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.