Till skillnad från faktisk programmeringsspråkskod, de:
- inte bärbar (varje db har sin egen version av PL/SQL. Ibland olika versioner av samma databaser är inkompatibla - jag har sett det!)
- inte lätt att testa - du behöver en riktig (dev) databasinstans för att testa dem och därmed enhetstesta deras kod som en del av en build är praktiskt taget omöjligt
- inte lätt att uppdatera/släppa - du måste släppa/skapa dem, dvs modifiera produktionsdb för att släppa dem
- har inte biblioteksstöd (varför skriva kod när någon annan har det)
- är inte lätt att integrera med andra tekniker (prova att ringa en webbtjänst från dem)
- de använder ett språk som är ungefär lika primitivt som Fortran och är därför oelegant och mödosamt för att få användbar kodning gjord, så det är svårt att uttrycka affärslogik, även om det vanligtvis är det som är deras primära syfte
- erbjud inte felsökning/spårning/meddelandeloggning etc (vissa dbs kan stödja detta - jag har dock inte sett det)
- saknar en anständig IDE för att hjälpa till med syntax och länkning till andra befintliga procedurer (t.ex. som Eclipse gör för java)
- Personer som är skickliga på att koda dem är sällsynta och dyrare än appkodare
- deras "höga prestanda" är en myt, eftersom de körs på databasservern som de vanligtvis ökar db-serverns belastning, så att använda dem kommer vanligtvis att minska din maximala transaktionsgenomströmning
- oförmåga att effektivt dela konstanter (normalt löst genom att skapa en tabell och söka den inifrån din procedur - mycket ineffektivt)
- osv.
Om du har en mycket databasspecifik åtgärd (t.ex. en åtgärd i transaktionen för att upprätthålla db-integritet), eller håller dina procedurer väldigt atomära och enkla, kanske du överväger dem.
Försiktighet rekommenderas när du anger "hög prestanda" framtill. Det leder ofta till dåliga val på bekostnad av bra design och det kommer att bita dig mycket snabbare än du tror.
Använd lagrade procedurer på egen risk (från någon som har varit där och aldrig vill gå tillbaka). Min rekommendation är att undvika dem som pesten.