MainframeSupports
tip uge 39/2008:

En af mine trofaste læsere, Tage Gejl, er ophavsmanden bag ugens tip. Det er forfriskende med noget input udefra, da jeg jo ellers kun tager udgangspunkt i de problemstillinger, jeg selv støder på. Da jeg så Tages ide, blev jeg vildt begejstret, og spurgte straks om jeg måtte udgive den. Alle læsere er mere end velkomne til at komme med forslag, og jeg vil altid angive kilden, med mindre andet ønskes, hvis jeg synes, at tippet er værd at videregive.

Hvis du arbejder på en installation, der stædigt insisterer på, at mainframe applikationer kun skal eksekvere statisk SQL, så er der hjælp at hente i denne uges tip. Statisk SQL gør desværre, at hvad der fikst kan klares med et simpelt stykke dynamisk SQL ofte går hen og bliver til mange SQL-kald, som volder betydelige kvaler, når de skal rettes. Tage har fundet på en fiks metode til at have mange sort-kriterier i samme SQL-kald:

SELECT CASE :SORTCRITERIA
       WHEN 'FIRSTNAME' THEN FIRSTNAME
       WHEN 'MIDDLENAME' THEN MIDDLENAME
       ELSE LASTNAME
       END AS SORTCOLUMN
     , FIRSTNAME, MIDDLENAME, LASTNAME, OTHERINFO
FROM MYTABLE
WHERE ...
ORDER BY SORTCOLUMN

Før du eksekverer dette SQL-kald sætter du hostvariablen SORTCRITERIA til enten 'FIRSTNAME', 'MIDDLENAME' eller noget helt tredie (eksempelvis 'LASTNAME') og så sørger DB2 ellers for resten. WHERE-delen er selvfølgelig den samme fra gang til gang, dog styret af de hostvariable, der nu engang indgår.

Ulempen ved ovenstående fremgangsmåde er, at DB2 er tvunget til at foretage en intern SORT af alle de rækker, der opfylder betingelserne i WHERE-delen. Hvis det kun drejer sig om nogle få rækker, så betyder det ingenting i forhold til fleksibiliteten og vedligeholdelsesvenligheden af ovenstående SQL-kald. Hvis det hver gang drejer sig om flere tusinde rækker, så skal du nok genoverveje metoden, før DBA kommer efter dig.

Forrige danske tip        Last tip in english        Tip oversigten