Загрузка данных


set term !! ;

execute block
returns (
    table_name varchar(63),
    column_name varchar(63),
    sql_statement varchar(1000),
    result_count integer)
as 
    declare search_value varchar(30) = 'Искомое_значение'; /* <--- ЗАМЕНИТЕ ЭТО */
    declare has_result boolean;
    declare search_sql varchar(1000);
begin
    /* 1. Получаем список всех пользовательских таблиц и их колонок */
    for select trim(r.rdb$relation_name), trim(f.rdb$field_name)
        from rdb$relation_fields f
        join rdb$relations r on f.rdb$relation_name = r.rdb$relation_name
        where r.rdb$view_blr is null 
          and (r.rdb$system_flag is null or r.rdb$system_flag = 0)
        order by r.rdb$relation_name, f.rdb$field_position 
        into :table_name, :column_name
    do
    begin
        /* 2. Для каждой колонки динамически строим и выполняем проверочный запрос */
        /*    Используем CONTAINING для поиска подстроки без учета регистра */
        search_sql = 'select exists(select * from "' || table_name || '" where upper("' || column_name || '") containing upper(?)) from rdb$database';
        
        begin
            execute statement search_sql (search_value) 
                into has_result;
                
            /* 3. Если значение найдено, показываем результат */
            if (has_result = true) then
            begin
                /* Формируем SQL для удобного просмотра данных */
                sql_statement = 'select * from "' || table_name || '" where "' || column_name || '" containing ''' || search_value || '''';
                result_count = 1;
                suspend;
            end
        end
        when any do
        begin 
            /* Пропускаем колонки, где тип данных несовместим с поиском (например, числа, даты) */
        end
    end
end !!

set term ; !!