MainframeSupports
tip uge 8/2016:

Har du nogensinde oplevet at få en sqlcode -922 eller -927. Begge disse sqlcodes betyder, at du ikke fik fat i DB2. Der kan være mange grunde til dette, hvis det er -922, men hvis det er -927, så er det, fordi dit program eller rettere LOAD-modul er LINK/BIND'et med den forkerte version af entrypoint DSNHLI. Det kan det også være med en -922, men det er forholdsvis sjældent.

Lad mig lige rekapitulere, hvordan et program udfører et SQL-statement. I vores programmer skriver vi EXEC SQL, men når SQL-kaldet skal eksekveres sker det ved at kalde entrypoint DSNHLI. Dette entrypoint findes i forskellige DB2 moduler:

Afhængig af hvordan dit program skal eksekveres, så skal det LINK/BIND'es med den rigtige udgave af et af ovenstående DB2 moduler. Hvis det ikke sker, så vil det højst sandsynligt resultere i en sqlcode -927 og mindre sandsynligt i en -922. En af konsekvenserne af ovenstående er, at rigtig mange installationer har to udgaver af deres programmer/LOAD-moduler, nemlig en til CICS og en til batch (typisk DSN-processoren).

I DB2 version 10 erkendte IBM endelig, at ovenstående er noget frygtelig rod, så derfor findes der nu også et DB2 modul, der hedder DSNULI. Hvis dit program LINK/BIND'es med DSNULI i stedet for en af ovenstående DB2 moduler, så vil alle SQL-kald fungere, uanset hvordan dit program eksekveres. Se det er da rigtig smart og i højeste grad på tide.

Måske har du undret dig over, hvorfor jeg ikke har omtalt IMS. Det er fordi, at DSNULI desværre ikke kan benyttes, hvis dit program skal eksekveres af IMS. Der er også andre restriktioner, som er beskrevet i Application programming and SQL.

Forrige danske tip        Last tip in english        Tip oversigten