Stored procedures (MySQL)
Stored procedures oftewel sprocs zijn subroutines die worden opgeslagen in een tabel binnen de betreffende database.
Voordelen van sprocs
- Encapsulation/abstraction/overzicht: Door onderdelen van een script in sprocs onder te brengen, behoud je overzicht
- Flow control: In sprocs heb je veel meer flexibiliteit tav. flow control dan in SQL-statements
- Hergebruik van data
- Common gateway: Sprocs zijn business logic die tezamen met de database wordt opgeslagen. Da's handig voor overige business logic en de user interfaces daar bovenop: Eén vaste plek waar 'essentiële' routines voor handen zijn.
MySQL Workbench
In MySQL Workbench kun je een nieuwe stored procedure aanmaken door in de linkerkolom te klikken op het bijbehorende icoon boven de sectie Management.
Hello, World!
Data-abstractie & variable lifetime
Let op: Variablen zijn ook buiten de betreffende sproc beschikbaar in scripts. Dat klinkt inconsistent omdat je in sprocs output kunt defineren, maar het komt goed uit, omdat er al zo weinig mogelijkheden zijn om te debuggen. Het is daarom vaak handig om variabelen te resetten voor gebruik.
Sprocs & mysql client
Sprocs lijken beperkt toegankelijk te zijn vanaf de mysql client:
show procedure status; # Toon status van alle sprocs in de actieve database
Variabelen & input-parameters
Er zijn nogal wat beperkingen omtrent gebruik van variabelen en input-parameters in sprocs. Als vuistregel lijkt te gelden, dat je geen 'structurele' zaken via input-parameters mag regelen. Bv. [1]:
create procedure tel_records(in brontabel tinytext) begin select count(*) from brontabel; -- Werkt niet select count(*) from @brontabel; -- Werkt ook niet -- Dit werkt wel: set @ddl=concat("select count(*) from ",brontabel); PREPARE stmt FROM @ddl EXECUTE stmt; DEALLOCATE PREPARE stmt; end
Zie ook
Bronnen
- http://code.tutsplus.com/articles/an-introduction-to-stored-procedures-in-mysql-5--net-17843 - Aardige inleiding
- http://www.datingking.com/ - MySQL 5 Stored Procedures - An Introduction - Part 1 - Warrig, want functions en procedures door elkaar
- http://a2znotes.blogspot.nl/2015/01/introduction-to-stored-procedure.html
- http://stackoverflow.com/questions/2754423/use-a-variable-for-table-name-in-mysql-sproc
MySQLTutorial.org