dvim Опубликовано: 25 апреля, 2019 Share Опубликовано: 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 Цитата Ссылка на комментарий Поделиться на других сайтах More sharing options...
Рекомендованные сообщения
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.