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.