MainframeSupports
tip uge 53/2004:

Jeg vil starte med at ønske alle mine læsere en god jul og et godt nytår. Det næste tip udkommer først den 10. januar.

Merry Christmas and a happy new year to all of you. The next tip will be published on the 10th of january.

I denne juletid, hvor arbejdsgiverne har kronede dage, håber jeg, at denne uges tip kan bringe lidt varme frem ved skærmene. Med DB2 version 7 blev det nemlig muligt at begrænse antallet af rækker, som et SQL-kald returnerer. Man tilføjer simpelthen en FETCH FIRST n ROWS ONLY til allersidst i sit SQL-kald. Hvis man kun ønsker at hente een række, så kan man skrive FETCH FIRST ROW ONLY.

Der er mange gode ting ved denne nye mulighed. Eksempelvis stopper DB2 med at hente rækker, så snart det angivne antal rækker er nået. DB2 finder den hurtigst mulige måde at hente rækkerne på. Det har især stor betydning, hvis du ønsker at vide om der findes nogen rækker, der opfylder et bestemt kriterie, men i øvrigt er ligeglad med resultatet. med FETCH FIRST ROW ONLY får du svaret på den performancemæssige mest optimale måde.

Hvis du bruger en cursor i et program, så får du altså sqlcode 100, når du udsteder fetch nummer n + 1. Bemærk, at hvis du har en ORDER BY, så bliver resultatet sorteret først, hvis det ellers er nødvendigt. DB2 vil gå langt i bestræbelserne på at returnere de n rækker i den rigtige rækkefølge uden at skulle lave en sortering, eksempelvis ved at benytte indexer.

Hvis jeg skal sige noget negativt om denne nye mulighed, så er det, at det er hamrende irriterende, at man ikke kan benytte ORDER BY sammen med en SELECT INTO. Det ligger da ellers lige for, nu hvor man også på SELECT INTO kan angive FETCH FIRST ROW ONLY. Læg mærke til, at på SELECT INTO forhindrer FETCH FIRST ROW ONLY effektivt dit SQL-kald i at give sqlcode -811.

Forrige danske tip        Last tip in english        Tip oversigten