Das Problem hängt mit dem internen Cache von Firebird zusammen. Wenn Proc A eine Proc B aufruft, dann wird die in den cache geladen wenn Proc A ausgeführt wird. Wird Proc B geändert und neu compiliert, müsste Firebird den Cache leeren oder zumindest diese Proc B entladen oder neu laden, tut er aber nicht. Da hilft nur die Proc A zu übersetzen opder Firebird neu starten im Moment.
Das Problem ist schon seit 2009 bekannt, aber offensichtlich noch nicht gelöst (obwohl
IMHO ein Quick'n'Dirty fix könnte sein dass man einfach den cache leert oder dass man ein Kommando im script schicken kann, der das tut).