powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Получить данные из другой БД в запросе
25 сообщений из 54, страница 1 из 3
Получить данные из другой БД в запросе
    #39602201
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Напомните пожалуйста как заполнить данные в таблице из другой БД.

Есть БД в которой храниться ФИО полностью.
назовем БД - FIO.FDB и таблицу family, поля fam, im, otch.

Нужно в текущую БД тоже в поля fam, im, otch прописать данные из БД fio.fdb

Ключевое поле связка - app_num

Где-то тут были сообщения как, но не смог найти.
Помогите вспомнить.

--------------------------
Firebird 3.0.1.32609;
IBExpert 2017.3.12.1;
Windows 10 32-bit;
4Gb RAM;
SSD 512Mb + HDD 1 Tb;
Настройки по умолчанию

Среда разработки:
Delphi XE2 + FIBPlus 7.4
...
Рейтинг: 0 / 0
Получить данные из другой БД в запросе
    #39602208
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
execute statement ... on external ...
Запустит клиента от имени сервера и выполнит указанный запрос к указанной БД.
...
Рейтинг: 0 / 0
Получить данные из другой БД в запросе
    #39602232
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
set names WIN1251;
set CLIENTLIB 'fbclient.dll';
connect 'D:\FB_log_database.fdb' user 'SYSDBA' password 'masterkey';
execute block
as
declare variable T_COUNT integer;

begin
  for execute statement('select count(*) from repl$log')
          on external 'srv:market.fdb'
          with autonomous transaction
          as user 'SYSDBA' password 'masterkey'
          into :T_COUNT

  do
  begin
    insert into REPL (COUNT_REPL, TIME_WRITE)
    values (:T_COUNT, current_timestamp);


  end

end;
commit; 

...
Рейтинг: 0 / 0
Получить данные из другой БД в запросе
    #39602240
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar,

а зачем тебе для SELECT запроса автономная транзакция?
...
Рейтинг: 0 / 0
Получить данные из другой БД в запросе
    #39602246
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar,
Спасибо. В IBExpert сработало. Сейчас в программе через FIBScript попробую.
...
Рейтинг: 0 / 0
Получить данные из другой БД в запросе
    #39602310
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,
Интересно как-то получается.

У меня сейчас, в делфи, при импорте из ДБФ по каждой строке ДБФ открывается отдельный запрос, который из другой БД вытаскивает мне ФИО полностью по app_num.
Значения присваиваются параметрам и делается инсерт в текущую БД.

Сделал по рекомендации Gallemar.
Получилось в 2 раза дольше.
Можете подсказать почему так происходит.
...
Рейтинг: 0 / 0
Получить данные из другой БД в запросе
    #39602312
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,
рекомендацию Gallemar пока тестирую в IBExpert
...
Рейтинг: 0 / 0
Получить данные из другой БД в запросе
    #39602329
Граур Станислав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrushakrush,
Интересно как-то получается.

У меня сейчас, в делфи, при импорте из ДБФ по каждой строке ДБФ открывается отдельный запрос, который из другой БД вытаскивает мне ФИО полностью по app_num.
Значения присваиваются параметрам и делается инсерт в текущую БД.



Что такое отдельный запрос? От чего отдельный?
Конечно, "дельфи тут никто не знает", но с примерами кода дело пойдет быстрее.
...
Рейтинг: 0 / 0
Получить данные из другой БД в запросе
    #39602332
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
15.02.2018 13:38, akrush пишет:
> У меня сейчас, в делфи, при импорте из ДБФ...

а в африке негры не черного цвета.
оттенки разные у них.
а ДБФ не FireBird.
а мягкое с тёплым сравнивать без толку.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Получить данные из другой БД в запросе
    #39602349
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,

потому что кто-то страдает фигнёй. Если на каждую запись одного резалтсета лазить за данными в другую БД, то проще повесится.
Особенно учитывая что пока что пула внешних соединений нет (в 4.0 обещают). Собственно установка соединения с БД один из самых дорогих ресурсов.
...
Рейтинг: 0 / 0
Получить данные из другой БД в запросе
    #39602352
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrushУ меня сейчас, в делфи, при импорте из ДБФ по каждой строке ДБФ открывается отдельный запрос, который из другой БД вытаскивает мне ФИО полностью по app_num.
Значения присваиваются параметрам и делается инсерт в текущую БД.Сколько миллионов записей нужно за раз вытаскивать? С какой периодичностью?
...
Рейтинг: 0 / 0
Получить данные из другой БД в запросе
    #39602358
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky,
до 200тыс. 1 раз в месяц
...
Рейтинг: 0 / 0
Получить данные из другой БД в запросе
    #39602369
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе немного и не часто, но озадачиться внешними таблицами (EXTERNAL TABLE) уже можно. Если в дбф-ку сложить только текстовые поля, а в базе задекларировать внешнюю таблицу с CHAR полями, то внешняя таблица будет очень похожа на дбф-ку с откушенным заголовком. Ну а дальше одним запросом все вытаскивается.
...
Рейтинг: 0 / 0
Получить данные из другой БД в запросе
    #39602370
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrushСейчас в программе через FIBScript попробую.
интересно, зачем надо лезть через из приложения первый сервер ко второму, когда можно напрямую сделать коннект ко второй БД?
...
Рейтинг: 0 / 0
Получить данные из другой БД в запросе
    #39602383
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvakrushСейчас в программе через FIBScript попробую.
интересно, зачем надо лезть через из приложения первый сервер ко второму, когда можно напрямую сделать коннект ко второй БД?
а как?
...
Рейтинг: 0 / 0
Получить данные из другой БД в запросе
    #39602394
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,

Коннект в одну БД, выгрузить данные на клиента в память. Потом коннект в другую, загрузить данные туда. Либо коннект туда и туда сразу. Грубо говоря, экспорт/импорт через клиента. Но Дельфи не знаю. Но не вижу проблем.
...
Рейтинг: 0 / 0
Получить данные из другой БД в запросе
    #39602403
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI,
Я так сейчас и делаю.
Но думал можно ускориться
130тыс. записей сейчас импортируются с конектом в другую БД - 2минуты
...
Рейтинг: 0 / 0
Получить данные из другой БД в запросе
    #39602406
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,

ну 2 минуты это не много для того что происходит раз в месяц
...
Рейтинг: 0 / 0
Получить данные из другой БД в запросе
    #39602418
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXIКоннект в одну БД, выгрузить данные на клиента в память. Потом коннект в другую, загрузить данные туда
вот еще советчик...

http://www.ibase.ru/impexp/

берем небуферизирующий датасет, коннект к одной БД, коннект к другой БД. И по очереди читаем 1 запись, вставляем, читаем, вставляем, ....
akrushНо думал можно ускориться
можно. использовать для insert препарированный запрос, и в цикле параметры передавать. Делать вставку всех 130к записей в одной транзакции. И небуферизирующий датасет, читающий данные. Ну вроде все.
...
Рейтинг: 0 / 0
Получить данные из другой БД в запросе
    #39602420
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvможно.

Но сложно. У него и так уже 1000 записей в секунду.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Получить данные из другой БД в запросе
    #39602423
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,

Если в БД fio.fdb можно создавать процедуры, то рекомендую следующее:

1. Создаем в FIO.fdb такую процедуру:
strtoid
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
create or alter procedure strtoid (
    str blob,
    l varchar(20) = null)
returns (
    n integer,
    code bigint)
AS
declare variable p int = -1;
declare variable t int = 1;
declare variable l1 int;
declare variable p1 int;
declare variable p2 int;
declare variable cc varchar(20);
declare variable nums varchar(16) = '[-+]?[0-9]{1,19}';
begin
  if (l is null) then
  begin
    p1 = position(',', str);
    p2 = position('~', str);
    if (p2 > 0 and (p1 = 0 or p1 > p2)) then l = '~'; else l = ',';
  end

  N = 1;
  l1 = char_length(l);
  while (p <> 0) do
  begin
    p = position(l, str, t);
    if (p = 0) then
      cc = left(substring(str from t), 20);
    else
      cc = left(substring(str from t for p-t), 20);
    if (cc similar to nums) then
    begin
      code = cc;
      suspend;
      N = N + 1;
    end
    t = p + l1;
  end
end



2. В процедуре, после импорта всех данных,
Получаем список всех app_num в блоб (select list(distinct app_num) from ...)
и выполняем
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  for execute statement ('select app_num, fam, im, otch from strtoid(:bl) s left join family on app_num = s.code ')
      (bl := :bl)
    on external 'fio.fdb'
  into app_num, fam, im, otch do
  begin
    update family set
      fam = :fam,
      im = :im,
      otch = :otch
    where app_num = :app_num;
  end
...
Рейтинг: 0 / 0
Получить данные из другой БД в запросе
    #39602444
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrushKreatorXXI,
Я так сейчас и делаю.
Но думал можно ускориться
130тыс. записей сейчас импортируются с конектом в другую БД - 2минуты

На мой взгляд многовато, мягко говоря. Я бы для начала выяснил, где тормоз - на чтении или на записи. Если на записи, то уже бы посмотрел повнимательней - блобы, индексы, может триггеры...
Есть подозрение, что в лоб что по лбу, через клиента или через внешнюю БД. по скорости имею ввиду.
...
Рейтинг: 0 / 0
Получить данные из другой БД в запросе
    #39602475
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI,

1000+ записей в секунду - недостаточно быстро?

*Ну у вас и запросы! - сказала база и повесилась.
...
Рейтинг: 0 / 0
Получить данные из другой БД в запросе
    #39602500
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery,

Запись записи рознь, конечно. Но скорость должна быть на порядок выше. 10000+ в секунду.
...
Рейтинг: 0 / 0
Получить данные из другой БД в запросе
    #39602502
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI,

это смотря откуда эти записи читаются. Если через сеть, да ещё и ширина записи большая, то ...
...
Рейтинг: 0 / 0
25 сообщений из 54, страница 1 из 3
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Получить данные из другой БД в запросе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]