Решить эту проблему можно следующим способом:
1. сохранить где-нибудь вне базы данных (хоть в текстовом файле) исходный текст процедуры, которую надо удалить.
2. создать "пустую" процедуру
create procedure DUMMY as begin exit; end3. скопировать blr пустой процедуры в blr "испорченной":
UPDATE RDB$PROCEDURES SET RDB$PROCEDURE_BLR = (SELECT RDB$PROCEDURE_BLR FROM RDB$PROCEDURES WHERE RDB$PROCEDURE_NAME = 'DUMMY') WHERE RDB$PROCEDURE_NAME = 'MYBADPROC'выполнять эту команду надо с большой осторожностью, чтобы случайно не "очистисть" другие процедуры.
4. удалить процедуру
DROP PROCEDURE MYBADPROC;5. создать процедуру MYBADPROC по новой (из сохраненного текста)
Вообще можно было бы поступить и проще, например без удаления - т.е. создать в качестве DUMMY правильную процедуру, и заменить испорченный blr на правильный. Однако, при этом придется процедуру DUMMY сохранить, т.к. если ее удалить, удалятся все описания параметров процедуры, которые создаются в RDB$PROCEDURE_PARAMETERS.
Вы сами можете проверить предлагаемый способ и его варианты на тестовой
базе данных.
(с) KDV, www.ibase.ru