En PL /SQL-funksjonen er den samme som en prosedyre bortsett fra at den returnerer en verdi. Derfor er alle diskusjoner om forrige kapittel er oppfylt for funksjoner også.
Opprette en funksjon
En frittstående funksjonen er opprettet med CREATE FUNCTION. Forenklet syntaks for CREATE OR REPLACE PROSEDYRE utsagnet er som følger:
CREATE [OR REPLACE] funksjonen funksjons [(parameternavn [IN | OUT | IN OUT] skriver [...])] RETURN return_datatype {IS | AS} BEGIN < function_body > END [funksjonsnavn];.
Hvor, etter
funksjonsnavn
angir navnet på funksjonen
[OR REPLACE] alternativet kan modifisere en eksisterende funksjon.
Den valgparameterlisten inneholder navn, modus og typer parametere. I representerer denne verdien vil bli overlevert fra utsiden og OUT representerer at denne parameteren vil bli brukt til å returnere en verdi utenfor prosedyren.
Funksjonen må inneholde en retur
uttalelse.
RETURN
klausul presiserer at datatypen du kommer til å gå tilbake fra funksjonen.
funksjon-body
inneholder den kjørbare delen.
AS nøkkelordet brukes i stedet for IS søkeord for å lage en frittstående funksjon.
< h2> Eksempel:
Følgende eksempel illustrerer skape og å kalle en frittstående funksjon. Denne funksjonen returnerer det totale antall kunder i kunder tabellen. Vi vil bruke KUNDER bord, som vi hadde laget i PL /SQL-variabler kapittel:
Velg * fra kunder; + ---- + ---------- + ----- + - ---------- + ---------- + | ID | NAME | AGE | ADRESSE | LØNN | + ---- + ---------- + ----- + ----------- + ---------- + | 1 | Ramesh | 32 | Ahmedabad | 2000.00 || 2 | Khilan | 25 | Delhi | 1500.00 || 3 | Kaushik | 23 | Kota | 2000.00 || 4 | Chaitali | 25 | Mumbai | 6500.00 || 5 | Hardik | 27 | Bhopal | 8500.00 || 6 | Komal | 22 | MP | 4500.00 | + ---- + ---------- + ----- + ----------- + ---------- + CREATE OR BYTT FUNKSJON totalCustomersRETURN nummeret er totalt antall (2): = 0; BEGIN SELECT count (*) i totalt fra kunder; TILBAKE totalt; END; /
Når ovenfor koden kjøres ved hjelp av SQL teksten, det vil gi følgende resultat:
Funksjon opprettet
Ringe en funksjon
Når du oppretter en funksjon, gi deg. en definisjon av hva funksjonen har å gjøre. Hvis du vil bruke en funksjon, må du ringe den funksjonen til å utføre den definerte oppgaven. Når et program kaller en funksjon, program kontroll overført til kalt funksjonen.
En kalt funksjonen utfører definert oppgave, og når sin retur setningen utføres, eller når den siste slutt uttalelsen er nådd, går den programkontrollen tilbake til hovedprogrammet.
Å kalle en funksjon du bare trenger å gi de nødvendige parameterne sammen med funksjonsnavn og hvis funksjonen returnerer en verdi så kan du lagre returnerte verdien. Følgende program kaller funksjonen totalCustomers fra en anonym blokk:
ERKLÆRER c nummer (2); BEGIN c: = totalCustomers (); dbms_output.put_line ('Total ingen av kundene.' || c); END; /
Når ovenfor koden kjøres på SQL teksten, gir det følgende resultat:
Total no. av kunder:. 6PL /SQL prosedyre fullført
Eksempel:
Det følgende er et eksempel som viser Erklærte, Definere og Starte et Enkel PL /SQL-funksjon som beregner og returnerer maksimalt to verdier .
erklære en nummer, b nummer, c nummer, FUNKSJON findMax (x i antall, y i antall) RETURN numberIS z nummer, BEGIN IF x > y SÅ z: = x; ELSE Z: = y; END IF; RETURN z; END; BEGIN a: = 23; b: = 45; c: = findMax (a, b); dbms_output.put_line ('Maksimalt (23,45):' || c); END; /
Når ovenfor koden kjøres på SQL teksten, gir det følgende resultat:
Maksimalt (23,45 ):. 45 PL /SQL-prosedyren ble fullført
PL /SQL rekursive funksjoner
Vi har sett at et program eller underprogram kan ringe en annen subprogram. Når et underprogram kaller seg, er det referert til som en rekursiv samtale og prosessen er kjent som rekursjon.
For å illustrere konseptet, la oss beregne fakultetet til et tall. Fakultetet til et tall n er definert som:
n! = N * (n-1)! = N * (n-1) * (n-2)! ... = N * (n-1) * (n-2) * (n-3) ... 1
Følgende program beregner fakultet til et gitt antall ved å ringe selv rekursivt:
ERKLÆRER num Antall; faktoriell nummer, FUNKSJON faktum (x antall) RETURN nummer IS f nummer, begynner Hvis x = 0, så f: = 1; ELSE f: = x * faktum (x-1); END IF; RETURN f; END; BEGIN num: = 6; fakultet: = faktum (num); dbms_output.put_line ('Fakultet' || num || 'er' || fakultetet); END; /
Når ovenfor koden kjøres på SQL teksten, gir det følgende resultat:
Fakultet 6 er 720 PL /SQL-prosedyren ble fullført.