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