Stored procedures (MySQL)

Uit De Vliegende Brigade
Ga naar: navigatie, zoeken
Een nieuwe sproc aanmaken in MySQL Workbench

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!

Wat ik heb ingetikt (muv. delimiter-statement)
MySQL Workbench voegt het Definer-statement toe
Aanroep & resultaat

Data-abstractie & variable lifetime

De tijdelijke tabel tbl_tools is in de aanroepende query aagenaakt, en is beschikbaar binnen de sproc

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

MySQLTutorial.org