Помогите с запросом для Firebird!

Модератор: Модераторы

Ответить
ViruZ
постоялец
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина
Контактная информация:

Помогите с запросом для Firebird!

Сообщение ViruZ »

Помогите составить SQL-запрос к БД Firebird, с помощью которого можно было бы заменить определенное значение одного столбца с именем NLPU для нескольких сотен таблиц, все таблицы начинаются с буквы F. Возможно ли одним запросом по шаблону имени таблицы провести такую замену?
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

если использовать execute statament - то очень просто
также можно использовать execute ibeblock - но это фишка IBExepert-а
сначала сделай запрос к rdb$relations - выбери все интересуюшие тебя таблицы - rdb$relations.rdb$relations_name like 'F%'
а потом формируй в итерациях строку запроса по эти выбранным таблицам и делай в нём что тебе надо.
ViruZ
постоялец
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина
Контактная информация:

Сообщение ViruZ »

IBExpert'ом как раз и пользуюсь. Что и в каком порядке нужно делать? Вопрос затал потому, что с SQL-запросами мне практически еще не приходилось работать, так что опыта в этой области у меня пока никакого :oops:
Если не сложно, подскажите готовый скрипт.
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

пожалуста:

Код: Выделить всё

execute block
as
declare variable f_table_name varchar(30);
declare variable sql_text varchar(1000);
begin
  for
    select
      cast(rdb$relation_name as varchar(30))
    from
      rdb$relations
    where
        rdb$relations.rdb$system_flag=0
      and
        rdb$relations.rdb$view_blr is null
      and
        rdb$relation_name like 'TB_%' --Выберем все наши таблицы, которые начинаются с "TB_"
    into
      :f_table_name
  do
  begin
    --Сфоррмируме текст запоса
    sql_text = 'update ' || f_table_name || 'set nlpu = 11111 where nlpu = 2222';
    execute statement sql_text;
  end
end


А вобще то для таких вещей специально придуманы Forign keys.
P.S.
Если не секрет - зачем это несколько сотен таблиц? а где нормализация и прочее?
ViruZ
постоялец
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина
Контактная информация:

Сообщение ViruZ »

Большое спасибо!!!
Таблицы из программы годовой отчетности по медицинской статистике - Medstat, сама программа находится на сайте http://www.medstat.ck.ua/, там можно скачать и посмотреть структуру БД.
Проблема возникла, когда поменялся справочник учреждений - поменялись коды, (коды, которые начинались на 505**** поменялись на 506****) но если действовать по инструкции, то уже внесенные данные должны были пропасть, а готово уже большая часть отчета, поэтому мне пришлось в обход программы подключаться к БД и менять соответсвующие коды в заполненных таблицах, но вручную этот процесс весьма трудоемкий из-за большого количества таблиц.
Ustas
постоялец
Сообщения: 153
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Сообщение Ustas »

Помогите с запросом!
Суть вот в чем: есть основная TABL и справочные TABL1, TABL2, TABL3. Справочные связаны с основной через таблицу связки LINKS, которая имеет структуру:

Код: Выделить всё

ID
TABL - ID основной TABL
LINK - ID справочной (одной из TABL1, TABL2, TABL3)
TABL - номер справочной таблицы

Не получается построить запрос на список значений основной TABL когда заданы LINKS.LINK нескольких справочных таблиц сразу.
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

Попробуйте этим, быстрее будет , а потом удалите лишнее

http://www.sqlmanager.net/ru/products/i ... r/download
http://www.sqlmanager.net/ru/products/ibfb/query

Добавлено спустя 30 секунд:
Есть бесплатная версия для баз до 100 мегабайт
Ustas
постоялец
Сообщения: 153
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Сообщение Ustas »

Спасибо!
Решил этот вопрос...
Ответить