Lagret procedure vs. funktion
Lagrede procedurer og funktioner er to typer programmeringsblokke. Begge skal have kaldenavne. Disse kaldende navne bruges til at kalde dem inde i en anden programmeringsblok som procedurefunktioner og pakker eller SQL-forespørgsler. Begge disse objekttyper accepterer parametre og udfører opgaven bag disse objekter. Dette er syntaksen (i ORACLE) til at oprette en lagret procedure, opret eller erstat procedurenavn (parametre)
as
begynd
udsagn;
undtagelse
exception_handling
end;
Og her er syntaksen til at oprette en funktion (i ORACLE), opret eller erstat funktion funktionsnavn (parametre)
retur return_datatype
as
begynd
udsagn;
return return_value/variable;
undtagelse;
exception_handling;
end;
lagrede procedurer
Som nævnt ovenfor kaldes lagrede procedurer programmeringsblokke. De accepterer parametre som brugerinput og behandler i henhold til logikken bag proceduren og giver resultatet (eller udfører en specifik handling). Disse parametre kan være IN, OUT og INOUT typer. Variabelerklæringer, variabeltildelinger, kontrolsætninger, loops, SQL-forespørgsler og andre funktioner/procedure/pakkekald kan være inde i procedureteksten.
Funktioner
Funktioner er også navngivne programmeringsblokke, som skal returnere en værdi ved hjælp af RETURN-sætning, og før den returnerer en værdi, udfører dens krop nogle handlinger også (i henhold til den givne logik). Funktioner accepterer også parametre, der skal køres. Funktioner kan kaldes inde i forespørgslerne. Når en funktion kaldes inde i en SELECT-forespørgsel, gælder den for hver række i resultatsættet af SELECT-forespørgslen. Der er flere kategorier af ORACLE-funktioner. De er
Enkeltrække-funktioner (returnerer et enkelt resultat for hver række i forespørgslen)
Der er underkategorier af funktioner i en enkelt række.
- Numerisk funktion (f.eks.: ABS, SIN, COS)
- Tegnfunktion (eks.: CONCAT, INITCAP)
- Dato-tidsfunktion (f.eks.: LAST_DAY, NEXT_DAY)
- Konverteringsfunktioner (eks.: TO_CHAR, TO_DATE)
- Samlingsfunktion (eks.: CARDINALITY, SET)
- Aggregerede funktioner (Returnerer en enkelt række, baseret på en gruppe af rækker. Eks.: AVG, SUM, MAX)
- Analytiske funktioner
- Objektreferencefunktioner
- Modelfunktioner
- Brugerdefinerede funktioner
Hvad er forskellen mellem funktion og lagret procedure?
• Alle funktioner skal returnere en værdi ved hjælp af RETURN-sætning. Lagrede procedurer returnerer ikke værdier ved hjælp af RETURN-sætning. RETURN-sætning i en procedure vil returnere dens kontrol til det kaldende program. OUT-parametre kan bruges til at returnere værdier fra lagrede procedurer.
• Funktioner kan kaldes inde i forespørgslerne, men lagrede procedurer kan ikke bruges inde i forespørgslerne.
• RETURN-datatypen skal inkluderes for at oprette en funktion, men i den lagrede procedure DDL er den ikke det.