
MainframeSupports tip uge 24/2005:
DB2 version 7 har efterhånden nogen år på bagen og DB2 version 8 er så småt
ved at tage over. Med hver ny DB2 version dukker nye features og funktioner op.
Det er svært at overskue alle de nye muligheder og især at filtrere i dem, man
måske kan bruge til noget.
Jeg sad for nylig i et PL/1 program og havde behov for at regne på en dato.
Det er ikke lige PL/1's stærkeste side, så jeg endte med følgende løsning:
EXEC SQL
SELECT DAYS(CURRENT DATE) - DAYS(:myDate)
INTO :dayDiff
FROM SYSIBM.SYSDUMMY1
;
Jeg har for nylig læst et sted, at man ikke skal anvende SYSDUMMY1 til den
slags, da ovenstående SQL-kald bliver behandlet som et hvilket som helst andet
SQL-kald mod en tabel. DB2 skal altså ud at hente den ene sølle række i
SYSIBM.SYSDUMMY1 for at udføre ovenstående SQL-kald. Så slog det mig, at der
måtte være andre måder at gøre det på. Og det er der selvfølgelig også. I DB2
version 7 blev SET statementet kraftigt udvidet, så det kan udføre en hvilken
som helst DB2 expression og endda flere i samme kald. Ovenstående SQL-kald
kan omskrives til:
EXEC SQL
SET :dayDiff = SELECT DAYS(CURRENT DATE) - DAYS(:myDate)
;
Se det er da langt mere elegant og vil blive behandlet langt hurtigere af
DB2 end SELECT statementet. Med denne nyere feature i DB2 bliver det
lettere og hurtigere for programmer at benytte sig af de mange funktioner, som
DB2 blev udstyret med i version 6 og udvidet med i version 7. Og der er sikkert
endnu flere i version 8. Men lad nu være med at benytte SET bevidstløst. Ethvert
SQL kald bliver sendt over i DB2 for at blive behandlet der, og dermed er det
meget dyrere at benytte en funktion i DB2 end en tilsvarende i det program, du
foretager kaldet fra. Med andre ord, hvis programmeringssproget understøtter den
funktion, du har behov for, så brug programmeringssprogets.
Den fulde beskrivelse af SET kan du læse i
SQL reference. Bemærk som sagt især, at du kan udføre mange SET kommandoer i
et og samme SQL kald.
Forrige danske tip
Last tip in english
Tip oversigten
|