1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
/* - EXEMPLE REXX SQL (EDIT DES TABLES 'SYSIBM.SYS%') */
/* -------------------------------------------------- */
SUBSYS = 'DB??' /* Nom du DB2 pour CONNECT */
address TSO 'subcom DSNREXX'
If rc then s_rc = rxsubcom('ADD','DSNREXX','DSNREXX')
address DSNREXX 'CONNECT' SUBSYS
If SQLCODE <> 0 then do
say "Erreur CONNECT DB2. SQLCODE =" SQLCODE'/'SQLSTATE
Exit 8
End
/* -------------------------------------------------- */
address DSNREXX 'EXECSQL DECLARE C1 CURSOR FOR S1'
SQLSTMT="SELECT DISTINCT NAME,DBNAME,TSNAME,DBID,OBID,COLCOUNT,CARD " ,
"FROM SYSIBM.SYSTABLES WHERE NAME LIKE 'SYS%' " ,
"AND CREATOR = 'SYSIBM'"
/* -------------------------------------------------- */
address DSNREXX 'EXECSQL PREPARE S1 FROM :SQLSTMT'
If SQLCODE <> 0 then do
ZEDLMSG = SUBSYS 'Erreur PREPARE SQLCODE='SQLCODE'/'SQLERRMC,
!! '/'SQLSTATE 'SQLERRP='SQLERRP ,
'SQLERRD='SQLERRD.1','SQLERRD.2','SQLERRD.3',',
!! SQLERRD.4','SQLERRD.5','SQLERRD.6
Address ISPEXEC "SETMSG MSG(ISRZ001)" /* message d'erreur ISPF */
exit 8
End
Address DSNREXX 'EXECSQL OPEN C1'
If SQLCODE <> 0 then say "OPEN SQLCODE =" SQLCODE'/'SQLSTATE
/* ---- ACCES AUX LIGNES DB2 DU SELECT ------------- */
do I1 = 1 BY 1 while SQLCODE = 0 /* inutile de lire si OPEN KO */
address DSNREXX "EXECSQL FETCH C1 INTO :NAME, :DBNAME, :TSNAME," ,
":DBID, :OBID, :COLCOUNT, :CARD"
If SQLCODE <> 0 & SQLCODE ^= 100 then do /* erreur avant la fin ? */
TAB.I1 = "FETCH SQLCODE =" SQLCODE'/'SQLSTATE
L1 = length(TAB.I1)
I1 = I1+1
TAB.I1 = Copies('!',L1)
leave
End
OUT=Left(NAME,22)!!Left(Strip(DBNAME)'.'TSNAME,20) ,
Right(DBID,3,'0') ' ' Right(OBID,3,'0') ' ' ,
Right(COLCOUNT,5,'0') Right(CARD,4)
If I1 = 1 then do /* ajout de 2 lignes titre */
TAB.I1=Left(' NOM TABLE',23) 'DBNAME TSNAME ' ,
'OBID DBID COUNT CARD'
I1 = I1 + 1
TAB.I1 = '>' Copies('-',length(OUT)+1) ; I1 = I1 + 1
End
TAB.I1 = '-' OUT /* nouvelle ligne préparée en mémoire */
If I1 >= 500 then leave /* on affiche jusqu'à 500 lignes ! */
End
Address TSO
/* ---- LIBERATION DES RESSOURCES DB2 -------------- */
TAB.0 = I1
address DSNREXX "EXECSQL CLOSE C1"
address DSNREXX "DISCONNECT"
/* ---- EDIT DES COLONNES DB2 SELECTIONNEES -------- */
address ISPEXEC "VGET (ZTEMPF)"
DDN = "TP"random()
"ALLOC DD("DDN") DA('"ZTEMPF"') SHR"
"EXECIO * DISKW" DDN "(FINIS STEM TAB. FINIS)"
Drop TAB.
Address ISPEXEC "EDIT DATASET('"ZTEMPF"')"
"FREE DD("DDN")"
Exit |
Partager