parallax background image

Verschillen Stored Procedure en functie binnen SQL

Gepubliceerd op 30 september 2019 Leestijd : 2 minuten

In SQL heb je veel verschillende functionaliteiten waar je gebruik van kunt maken bij het schrijven van queries, waaronder: triggers, stored procedures, build-in functions en user defined functionts. Twee daarvan kunnen nogal op elkaar lijken, een stored procedure en een functie. Wat zijn nu de verschillen hiertussen?

Voordat we per functionaliteit een aantal verschillen opnoemen, zullen we kort omschrijven wat beide nu ook alweer zijn.

Een Stored Procedure is een set van queries die je kunt opslaan, aanroepen en hergebruiken.

Een Functie  is een query die een parameter accepteert, hiermee bepaalde taken uitvoert, zoals een berekening, en het resultaat hiervan teruggeeft. Ook deze query of set van qeuries wordt opgeslagen en is herbruikbaar.

Zoals hierboven beschreven, lijken stored procedures en functies erg op elkaar. Toch zijn er een aantal verschillen die kunnen bepalen of je in een bepaald scenarie gebruik maakt van een stored procedure of van een functie.

Parameters

Een functie moet altijd een waarde teruggeven. Dit kan een enkele waarde zijn maar dit kan ook een set zijn, bijvoorbeeld een tabel. Een stored procedure kan een waarde of set teruggeven, maar dit is niet verplicht. De stored procedure kan bijv. een tijdelijke tabel vullen met data maar hoeft deze verder niet als set terug te geven aan de aanroepende query.

Daarnaast kan een stored procedure wel een output variabele hebben, maar een functie niet. Een output variabele kan handig zijn als je meerdere waarden terugkrijgt uit een stored procedure.

Error handling

Binnen een functie is het niet mogelijk om zowel met transactions als met try catch blokkken te werken. Dit kan een overweging zijn om een keuze te maken tussen een stored procedure en een functie.

Soorten statements

Binnen een functie kun je alleen gebruik maken van een SELECT statement, niet van een INSERT/UPDATE/DELETE. Je kunt geen tabellen manipuleren binnen een functie. Binnen een stored procedure kan dit wel.
Een functie kan aangeroepen worden binnen een query, bijvoorbeeld in de WHERE statement of in een JOIN. Dit kan niet met een stored procedure.

Als laatste kun je binnen een stored procedure een functie aanroepen. Andersom kan dit niet.

Conclusie

Als je een keuze moet maken tussen een stored procedure en een functie: je kunt een stored procedure zien als een op zichzelf staand iets wat werkt kan verrichten zonder dat je daar iets van merkt of van terugkrijgt. Een functie is een functionaliteit die je aanroept die bepaalde data teruggeeft waarmee je weer verder werkt.

Wil je meer lezen over deze functies? Dat kan hier.

Onze klanten