W przeciwieństwie do rzeczywistego kodu języka programowania:
- nieprzenośne (każda baza danych ma swoją własną wersję PL/SQL. Czasami różne wersje tego tego samego bazy danych są niezgodne - widziałem to!)
- niełatwe do przetestowania – potrzebujesz prawdziwego (dev) instancja bazy danych w celu ich przetestowania, a zatem jednostkowe testowanie ich kodu w ramach kompilacji jest praktycznie niemożliwe
- niełatwe do aktualizacji/uwolnienia – musisz je usunąć/utworzyć, tj. zmodyfikować baza danych produkcyjnych, aby je zwolnić
- nie mam obsługi bibliotek (po co pisać kod, gdy ktoś inny ma)
- nie można łatwo zintegrować z innymi technologiami (spróbuj wywołać z nich usługę sieciową)
- używają języka mniej więcej tak prymitywnego jak Fortran, a zatem są nieeleganckie i pracochłonne, aby uzyskać przydatne kodowanie, więc trudno jest wyrazić logikę biznesową, mimo że zazwyczaj taki jest ich główny cel
- nie oferuj debugowania/śledzenia/rejestrowania wiadomości itp. (niektóre bazy danych mogą to obsługiwać - chociaż tego nie widziałem)
- brak przyzwoitego IDE, które pomogłoby w składni i łączeniu z innymi istniejącymi procedurami (np. jak Eclipse dla java)
- ludzie znający się na ich kodowaniu są rzadsi i drożsi niż koderzy aplikacji
- ich „wysoka wydajność” to mit, ponieważ działają na serwerze bazy danych, które zwykle zwiększają obciążenie serwera bazy danych, więc korzystanie z nich zwykle zmniejszy Twoja maksymalna przepustowość transakcji
- niemożność efektywnego udostępniania stałych (zwykle rozwiązywane przez utworzenie tabeli i wywołanie jej z poziomu procedury - bardzo nieefektywne)
- itd.
Jeśli masz działanie bardzo specyficzne dla bazy danych (np. działanie w trakcie transakcji mające na celu zachowanie integralności bazy danych) lub utrzymujesz bardzo atomowe i proste procedury, być może rozważ je.
Zaleca się ostrożność przy określaniu z góry „wysokiej wydajności”. Często prowadzi to do złych wyborów kosztem dobrego projektu i ugryzie Cię znacznie szybciej, niż myślisz.
Korzystaj z procedur przechowywanych na własne ryzyko (od kogoś, kto tam był i nigdy nie chce wracać). Moją radą jest unikanie ich jak ognia.