Code lezen en begrijpen
De meeste tijd van een developer gaat niet naar code schrijven, maar naar code lézen die iemand anders schreef. Daar oefen je zelden op. Op deze pagina's staat telkens één grote, realistische stored procedure, met daaronder vragen die stap voor stap moeilijker worden.
Je begint met begrijpen wat er staat en eindigt bij de vragen die er in productie echt toe doen: wat gebeurt er bij een lege set, wat breekt onder gelijktijdige transacties, en waarom gebruikt deze query die index niet? We beginnen met SQL.
Lees de procedure
Een echte, complete stored procedure van tientallen regels — geen fragment uit een boek.
Beantwoord de vragen
Ze beginnen bij "wat staat hier" en eindigen bij randgevallen, concurrency en performance.
Toon het antwoord
Pas als je zelf een antwoord hebt. Het verschijnt onder de vraag, met uitleg van het waarom.
Instap
Maandomzet per regio — een rapportagefunctie lezen
Een SQL-functie met CTE's, een HAVING-filter en een window-functie. Begin hier als je stored procedures nog niet dagelijks leest.
Dubbele klanten opsporen — window-functies als ontdubbelaar
De klassieke opschoonquery — welke rij houd je, welke is de dubbele? Met ROW_NUMBER, FIRST_VALUE en een tiebreaker die belangrijker is dan hij lijkt.
Gevorderd
Maandfacturatie — een PL/pgSQL-procedure onder de loep
Een batchprocedure met rijvergrendeling, idempotente inserts en een exception-handler per iteratie. Er zitten twee fouten in die pas na maanden zichtbaar worden.
Recursieve CTE — een stuklijst uitklappen zonder in een lus te blijven hangen
WITH RECURSIVE van anker tot afbreekconditie, met cyclusdetectie via een padarray. Waarom UNION ALL geen stijlkeuze is en waarom een dieptelimiet ook mét cyclusdetectie nodig blijft.
Expert
Voorraadsynchronisatie met MERGE — de gevaarlijkste tien regels T-SQL
Eén MERGE-statement dat invoegt, bijwerkt én verwijdert, met een dry-run en een CATCH-blok. Er zit dode code in, een dataverliesrisico en een subtiele reden waarom HOLDLOCK er staat.
Audit-trigger — vijf manieren waarop je logtabel liegt
Een PL/pgSQL-trigger die elke wijziging als JSONB wegschrijft. Hij crasht op DELETE, mist precies de gebeurtenissen die je wilde vastleggen, en zijn tijdstempels staan allemaal gelijk.
Liever wiskunde oefenen?
Practicely begon met wiskunde: meer dan 1000 opgaven met hints en uitwerkingen.
Naar Practicely wiskunde