dvim Опубликовано: 25 апреля, 2019 Опубликовано: 25 апреля, 2019 Периодически приходится писать знакомым сложные отчеты ... давно хотел такую вещь и наконец нашел и дописал. Очень надеюсь, что она поможет не только мне. В тексте пример процедуры ( запуск через ibexpert) которая позволяет искать все вхождения текста во все таблицы базы. Те, кто реально писал отчеты, знает что найти нетривиальную информацию в "схеме" очень и очень непросто. Первый раз что то подобное мне понадобилось на моей основной работе, там используем MS SQL. В результате был написан скрипт, который выполняет эту задачу. После этого, захотелось что то "эдакое" и для Firebird . В результате достаточно долго искал "идею", тем более что комьюнити fb несколько своеобразно . Но вот и итог - идея найдена на просторах интернета и процедура капитально доработана. Кому она станет интересна - тем, кто пользуется ibexpert и любит(или не любит но надо) делать нестандартные отчеты. Привожу код процедуры и видео ее использования. По тестам работает на FB 2.1, 2.5 (её можно использовать далеко не только для ПС4 ) Код процедуры character_set_id <> 4 - тут отрезаем юникодные поля. При поиске по ним русских символов была ошибка. Текст не ищем по служебным таблицам с $ Также прилагаю видео https://www.youtube.com/watch?v=h_93UU8jWQI Очень надеюсь, что данная идея будет полезной Код процедуры , можно скачать текстом... SET TERM ^ ; create or alter procedure dvim_SEARCH ( SEARCHPARAM varchar(100)) returns ( RESULT varchar(2000)) as declare variable SQL varchar(1000); declare variable TNAME varchar(32); declare variable FNAME varchar(32); declare variable FTYPE smallint; begin for select rdb$relations.rdb$relation_name from rdb$relations where not rdb$relations.rdb$relation_name like '%$%' into :tname do begin for select rdb$relation_fields.rdb$field_name,rdb$fields.rdb$field_type from rdb$relation_fields join rdb$fields on (rdb$relation_fields.rdb$field_source=rdb$fields.rdb$field_name) where rdb$relation_fields.rdb$relation_name=:tname and rdb$fields.rdb$field_type in (35,37) /char and varchar/ and rdb$fields.rdb$character_set_id <> 4 into :fname,:ftype do begin SQL='SELECT ' || FNAME || ' || '' table ' || TNAME || ' column ' || FNAME ||''' FROM '||TNAME||' WHERE '||FNAME||' LIKE ''%' || SEARCHPARAM || '%'''; for execute statement SQL into :RESULT --- RESULT = sql || ' union all' ; do suspend; end end end^ SET TERM ; ^ 1
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВойти
Уже зарегистрированы? Войдите здесь.
Войти сейчас