I et tidligere tip har jeg illustreret, hvor let det er at eksekvere en DB2-kommando fra REXX. Hvad hvis nu jeg vil udføre den fra et COBOL eller PL/1 program i stedet. Ja, så er det godt nok en helt anden sag. Det er faktisk så besværligt, at jeg næsten vil fraråde det. Hvis du alligevel ikke kan styre din nysgerrighed kommer her en stump kode, som udfører en -DIS GROUP fra PL/1. Før koden virker skal du have udført en CAF CONNECT til det DB2 subsystem, du vil eksekvere kommandoen på:
Resultatet af -DIS GROUP DB2-kommandoen er gemt i return_area. Du må selv gå ind og decifrere indholdet, hvis du synes, det skal stå pænt. Det er kaldet til dsnwli, der udfører kommandoen. Arealerne ifca, return_area og output_area skal erklæres som vist. Dog kan du sagtens erklære rtrn_buff større, men husk at assigne den rigtige længde af rtrn_buff til return_area.lngth. Værdien af output_area.lngth skal være 4 større en længden på selve kommando teksten plus en blank. Det er derfor jeg har skrevet 4 + 11, da -DIS GROUP er 10 tegn langt og så en ekstra for den blanke til sidst. Variablene i ifca skal have de værdier, jeg har givet dem.
Det er i øvrigt muligt at kalde dsnwli fra et program, der er startet op under DSN kommandoen. Det overflødiggør brugen af CAF og forenkler selve programmet, der udfører ovenstående kodestump, en smule. Jeg har dog ikke selv prøvet det. Eksemplet viser en DISPLAY kommando, men det virker uden andre ændringer end selve kommandoen også for alle andre DB2-kommandoer. Hold dig dog fra -STOP DB2 kommandoen. Du kan læse meget mere om DSNWLI, som også kaldes IFI interfacet i DB2 administration guide. Linket er til DB2 version 8, men det virker fint for ældre versioner. Hvis du gerne vil fange output fra en DB2-kommando, der fylder mere end størrelsen af return_area er du simpelthen nødt til at læse mere, for det har jeg aldrig prøvet.