Перейти к публикации
forum-okna.ru

Для тех, кто пишет отчеты. Поиск информации по всем таблицам базы


dvim

Рекомендованные сообщения

Периодически приходится писать знакомым сложные отчеты ... давно хотел такую вещь и наконец нашел и дописал.
Очень надеюсь, что она поможет не только мне.

В тексте пример процедуры ( запуск через ibexpert) которая позволяет искать все вхождения текста во все таблицы базы.

Те, кто реально писал отчеты, знает что найти нетривиальную информацию в "схеме"  очень и очень непросто.
Первый раз что то подобное мне понадобилось на моей основной работе, там используем MS SQL.
В результате   был написан скрипт, который выполняет эту задачу.
После этого, захотелось что то "эдакое"  и для Firebird .
В результате достаточно долго искал "идею", тем более что комьюнити fb несколько своеобразно :ph34r:.
Но вот и итог - идея найдена на просторах интернета и процедура капитально доработана.

Кому она станет интересна - тем, кто пользуется 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 ; ^

 

Ссылка на комментарий
Поделиться на других сайтах


Оконный портал tybet.ru | Подписка на новости | Бесплатные объявления | Наша телега | База оконных знаний | ОНЛАЙН-ВЫСТАВКА



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.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

Условия и правила использования форума Правила.