Jump to content
forum-okna.ru
Sign in to follow this  
dvim

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

Recommended Posts

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

В тексте пример процедуры ( запуск через 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 ; ^

 

  • Like 1

Share this post


Link to post
Share on other sites


Оконный портал 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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.