Os procedimentos armazenados bloqueiam você em uma plataforma de banco de dados específica. Por exemplo, o código escrito para o MySQL não será executado no SQL Server imediatamente. Isso torna seu aplicativo menos portátil. É claro que há mais na história: alcançar a portabilidade também exigiria o uso de tipos de dados padrão e a não depender de funções específicas da plataforma. Que na prática nem sempre é o caso.