Dette afsnit indeholder en kort beskrivelse af de funktioner, der benyttes i eksemplerne i bogen. En databasefunktion er en kobling mellem et sæt inputdataværdier og en resultatværdi.
Funktioner kan være indbyggede eller brugerdefinerede. DB2 Universal Database har mange indbyggede og forudinstallerede brugerdefinerede funktioner.
De indbyggede funktioner findes i skemaet SYSIBM, og de forudinstallerede brugerdefinerede funktioner findes i skemaet SYSFUN. SYSIBM og SYSFUN er reserverede skemanavne.
De indbyggede og forudinstallerede brugerdefinerede funktioner kan aldrig dække alle brugeres behov. Derfor er det nødvendigt for applikationsudviklere at lave deres egne applikationsspecifikke funktioner. Det kan gøres vha. brugerdefinerede funktioner, så DB2 Universal Database udvides til at omfatte f.eks. specielle virksomhedsspecifikke eller videnskabelige funktioner. Læs mere herom under Brugerdefinerede funktioner.
Beregningsfunktioner finder frem til en enkelt resultatværdi ud fra et sæt værdier i en kolonne. Her følger et par eksempler på beregningsfunktioner. Du kan finde en fuldstændig oversigt i SQL Reference.
I dette eksempel vælges den højeste løn fra tabellen STAFF:
SELECT MAX(SALARY) FROM STAFF
Sætningen returnerer værdien 22959.20 fra tabeleksemplet STAFF.
I det næste eksempel findes navnene på og lønningerne for medarbejdere, der tjener mere end gennemsnittet, selv om de har været ansat i kortere tid end gennemsnitsmedarbejderen.
SELECT NAME, SALARY FROM STAFF WHERE SALARY > (SELECT AVG(SALARY) FROM STAFF) AND YEARS < (SELECT AVG(YEARS) FROM STAFF)
Resultatet er:
NAME SALARY --------- --------- Marenghi 17506.75 Daniels 19260.25 Gonzales 16858.20
I dette eksempel er beregningsfunktionen i WHERE-udtrykket angivet i en underforespørgsel i stedet for at blive implementeret direkte (f.eks. WHERE SALARY > AVG(SALARY)). Beregningsfunktioner kan ikke angives i WHERE-udtrykket. Det skyldes den rækkefølge, funktioner udføres i. WHERE-udtrykket vurderes før SELECT-udtrykket. Derfor har beregningsfunktionen ikke adgang til værdisættet, når WHERE-udtrykket vurderes. Værdierne vælges senere vha. SELECT-udtrykket.
Du kan bruge DISTINCT-elementet i parameterværdien til en beregningsfunktion. Dermed elimineres dubletter, før en funktion aktiveres. Når du f.eks. angiver COUNT(DISTINCT WORKDEPT), beregnes antallet af forskellige afdelinger.
En skalarfunktion udfører en funktion med en enkelt værdi, så der returneres en anden enkelt værdi. Her følger et par eksempler på skalarfunktioner i DB2 Universal Database.
Der er en mere detaljeret oversigt over og beskrivelse af skalarfunktioner i SQL Reference.
I nedenstående eksempel returneres afdelingsnavnene fra tabellen ORG sammen med længden på de enkelte navne:
SELECT DEPTNAME, LENGTH(DEPTNAME) FROM ORG
Resultatet er:
DEPTNAME 2 -------------- ----------- Head Office 11 New England 11 Mid Atlantic 12 South Atlantic 14 Great Lakes 11 Plains 6 Pacific 7 Mountain 8
Bemærk: Da AS-udtrykket ikke er brugt til at navngive LENGTH(DEPTNAME), indsættes et nummer automatisk for den anden kolonne.
Tabelfunktioner returnerer kolonnerne i en tabel, hvilket ligner den tabel, der oprettes vha. en enkel CREATE TABLE-sætning.
En tabelfunktion kan kun bruges i FROM-udtrykket i en SQL-sætning.
Den eneste tabelfunktion, der p.t. understøttes i DB2 Universal Database, er SQLCACHE_SNAPSHOT.