Не удаляется View, которая использует UDF(давно утерянную)

Drag
Дата: 24.05.2012 19:10:55
Firebird-2.1.5.18496_0_x64_RC1
Задача комплексная, не буду описывать всех этапов, опишу только ошибку, с которой столкнулся.
Есть View, в ней некоторые поля выбираются используя UDF. DLLки где описана эта UDF уже нет. Соответственно сделать селект из нее не получается. Но мне то селект не нужен. Я хочу ее удалить, а получаю ту же ошибку, что и при селекте.

DROP VIEW STATINF_V;


invalid request BLR at offset 2.
function GET_INTBLOCK_BETWEENDOTSDEMO is not defined.
module name or entrypoint could not be found.

Решил как-то так, но боязно мне очень.

delete
  from RDB$RELATION_FIELDS
  where RDB$RELATION_NAME = 'STATINF_V';

delete from RDB$FIELDS f
  where exists (select RDB$FIELD_NAME
    from RDB$RELATION_FIELDS rf
    where rf.RDB$FIELD_SOURCE = f.RDB$FIELD_NAME and
      trim(rf.RDB$BASE_FIELD) = '' and
      RDB$RELATION_NAME = 'STATINF_V');

delete
  from RDB$VIEW_RELATIONS
  where RDB$VIEW_NAME = 'STATINF_V';

commit;

update RDB$RELATIONS set
  RDB$RELATION_ID = null
  where RDB$RELATION_NAME = 'STATINF_V';

commit;

delete
  from RDB$RELATIONS
  where RDB$RELATION_NAME = 'STATINF_V';

delete
  from RDB$RELATION_FIELDS
  where RDB$RELATION_NAME = 'STATINF_V';

commit;


Может как-то все же ее можно по честному удалить?
Ну или посмотрите мой код, все ли правильно?
Гаджимурадов Рустам
Дата: 24.05.2012 19:14:45
Попробуй вьюху предварительно альтернуть и сменить выражение
проблемного поля (чтобы отцепить udf). Хотя не факт, что сработает,
если все равно проверка существования будет выполняться.

P.S. Саму UDF из БД тоже удалить не мешало бы.
Гаджимурадов Рустам
Дата: 24.05.2012 19:16:02
А, в 2.1 же еще не было alter view. Ну, временно можно и 2.5 запустить.
Drag
Дата: 24.05.2012 19:34:15
Гаджимурадов Рустам,

при изменении выражения, она дропается и криейтится.
Саму UDF конечно же хочу удалить, но пока на нее есть депенденсы, не получается. А с 2.5 пока не получится, мне надо отдать скрипт, который должен все сделать.
Drag
Дата: 24.05.2012 19:56:40
Решил.

Создал DLL с такой точкой входа. Подложил ее в папку UDF.

Потом
ALTER EXTERNAL FUNCTION GET_INTBLOCK_BETWEENDOTSDEMO
MODULE_NAME 'some.dll';


И View удаляется и селектится :)

Всем спасибо за внимание.
Гаджимурадов Рустам
Дата: 24.05.2012 20:01:34
Дык это и надо было сделать или исходную UDF
(или любую другую с одноименной функцией) найти.
Я думал тебе лень просто. :)

P.S. DLL-ку вместе со скриптом придется таскать.
WildSery
Дата: 24.05.2012 20:23:31
Drag,

Если есть другие UDF, то лучше туда перекинуть.