РАБОТА С РАЗНЫМИ БД В ОДНОМ ЗАПРОСЕ

ЧАстые Вопросы и Ответы

Модераторы: kdv, CyberMax

Ответить
Vladimir03
Сообщения: 15
Зарегистрирован: 13 июн 2006, 07:54

РАБОТА С РАЗНЫМИ БД В ОДНОМ ЗАПРОСЕ

Сообщение Vladimir03 » 22 июн 2006, 20:54

В одной хорошей книге написано, что в одном запросе можно использовать таблицы из разных БД. В этом случае имя таблицы указывается в формате :ПсевдонимБД:ИмяТаблицы. Но там еще написано, что все это действует только в приложении или утилите, использующей BDE. С момента опубликования этой книги прошло уже очень много времени. Нельзя ли в утилитах для Interbase/Firebird использовать что-нибудь подобное? Если есть такая возможность, то напишите, пожалуйста, каким образом, или никак нельзя. Просто хотелось бы при экспорте данных из одной базы в другую использовать более гибкие условия, чем через скрипты и backup/restore.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 22 июн 2006, 21:30

Имею встречный вопрос: как выглядит именно один запрос из обоих баз сразу, требующийся именно при экспорте из одной базы в другую? Примерно хотя бы.

Vladimir03
Сообщения: 15
Зарегистрирован: 13 июн 2006, 07:54

Сообщение Vladimir03 » 22 июн 2006, 22:50

Merlin писал(а):Имею встречный вопрос: как выглядит именно один запрос из обоих баз сразу, требующийся именно при экспорте из одной базы в другую? Примерно хотя бы.
Например:

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

SELECT U.*
FROM ":MONITOR:NLS" N, ":DWH:OLAP_UPE" U
WHERE
U.SC_CODE = N.COD_SCENARIO
ORDER BY U.SC_CODE
:shock:

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 22 июн 2006, 23:32

Видишь ли, Владимир. Я это давно описывал в www.ibase.ru/devinfo/bde.htm (интересно, какую книгу ты имеешь в виду?).
И популярно объяснил, каким образом можно выполнить такой запрос, и как это делает BDE.
Отсюда морал - со времен BDE ни в одном драйвере (ODBC, OLE DB, dbExpress, JDBC, и т.д) не появилось такой фигни. То есть, конечно Оракл и МССКЛ умеют работать с т.н. "linked servers", правда, совершенно таким же образом.

Vladimir03
Сообщения: 15
Зарегистрирован: 13 июн 2006, 07:54

Сообщение Vladimir03 » 22 июн 2006, 23:44

kdv писал(а):Видишь ли, Владимир. Я это давно описывал в www.ibase.ru/devinfo/bde.htm (интересно, какую книгу ты имеешь в виду?).
И популярно объяснил, каким образом можно выполнить такой запрос, и как это делает BDE.
Отсюда морал - со времен BDE ни в одном драйвере (ODBC, OLE DB, dbExpress, JDBC, и т.д) не появилось такой фигни. То есть, конечно Оракл и МССКЛ умеют работать с т.н. "linked servers", правда, совершенно таким же образом.
Понятно.
А книга именуется Delphi 4 Руководство разработчика баз данных (В. В. Фаронов, П. В. Шумаков. 1999)

Конечно, все эти задачи можно проделать с двумя бд в приложении, из одной в качестве параметра данные брать в другую посредством двух компонентов IBDataSet, соединенных с двумя IBDatBase, но все это очень медленно.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 22 июн 2006, 23:50

Vladimir03 писал(а):

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

SELECT U.*
FROM ":MONITOR:NLS" N, ":DWH:OLAP_UPE" U
WHERE
U.SC_CODE = N.COD_SCENARIO
ORDER BY U.SC_CODE
Туплю я чо-то к вечеру несусветно. Не врубаюсь я, что он даёт для экспорта. Экспорт - эт што? Здесь возьми, суды полож. Два запроса, однако. Вот ежели говорить про простейшую репликацию, типа возьми здесь чего нет там и сложи туда, ещё как-то укладывается в голове. Однако такой запрос не катит для этого...

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 22 июн 2006, 23:55

Vladimir03 писал(а): Конечно, все эти задачи можно проделать с двумя бд в приложении, из одной в качестве параметра данные брать в другую посредством двух компонентов IBDataSet, соединенных с двумя IBDatBase, но все это очень медленно.
Ещё бы не медленно - IBDataSet не для того и предназначен. Для того предназначены либо 2 IBSQL, либо, на худой конец, два IBQuery. причём читающий тогда обязательно UniDirectional, пишушему-то пофиг, он не опенается, а екзекается. Главное чтоб был параметризованный, и собирался один раз, а не в цикле.

CCB
Сообщения: 35
Зарегистрирован: 20 июн 2006, 14:06

Сообщение CCB » 23 июн 2006, 08:37

Merlin писал(а):
Vladimir03 писал(а):

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

SELECT U.*
FROM ":MONITOR:NLS" N, ":DWH:OLAP_UPE" U
WHERE
U.SC_CODE = N.COD_SCENARIO
ORDER BY U.SC_CODE
Туплю я чо-то к вечеру несусветно. Не врубаюсь я, что он даёт для экспорта. Экспорт - эт што? Здесь возьми, суды полож. Два запроса, однако. Вот ежели говорить про простейшую репликацию, типа возьми здесь чего нет там и сложи туда, ещё как-то укладывается в голове. Однако такой запрос не катит для этого...
возможно имелось в виду что-то типа

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

INSERT INTO ":MONITOR:NLS" N
SELECT U.*
FROM ":DWH:OLAP_UPE" U
WHERE ... 
ORDER BY U.SC_CODE
хотя не знаю, приемлемо ли это в данном случае...

[отформатировано модератором]

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 23 июн 2006, 11:34

Почему народ упорно не желает юзать внешние таблицы? Или типа того, что чем может и дурак пользоваться только дурак и будет пользоваться?

БД источник:

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

insert into some_ext_table
...
select ... from some_int_table
потом пулучившееся файло {скомкать раром и} отправить (хоть е-майлом и через диалап) на сервер с базой приемником.

БД приемник

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

insert into some_int_table
...
select ... from some_ext_table
[Отформатировано модератором]

VladimirT
Сообщения: 1
Зарегистрирован: 08 июл 2006, 22:32

Сообщение VladimirT » 08 июл 2006, 22:43

Merlin писал(а):Имею встречный вопрос: как выглядит именно один запрос из обоих баз сразу, требующийся именно при экспорте из одной базы в другую? Примерно хотя бы.
И у меня вопрос. Две автономных базы на одном сервере. Хотелось бы справочник из одной пользовать в другой. Возможно ли это из встроеных процедур, триггеров, представлений, дабы клиент коннектился только к одной базе?

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 10 июл 2006, 02:05

VladimirT писал(а):И у меня вопрос. Две автономных базы на одном сервере. Хотелось бы справочник из одной пользовать в другой. Возможно ли это из встроеных процедур, триггеров, представлений, дабы клиент коннектился только к одной базе?
Володя, тебе только что объяснили, что либо внешние таблицы, либо никак. Прочитай весь топик, а не первые два поста.

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 10 июл 2006, 10:39

CyberMax писал(а):
VladimirT писал(а):И у меня вопрос. Две автономных базы на одном сервере. Хотелось бы справочник из одной пользовать в другой. Возможно ли это из встроеных процедур, триггеров, представлений, дабы клиент коннектился только к одной базе?
Володя, тебе только что объяснили, что либо внешние таблицы, либо никак. Прочитай весь топик, а не первые два поста.
Не забываем при эторм про особенности внешних таблиц, как, например, работа с "update".

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 10 июл 2006, 15:36

Ivan_Pisarevsky писал(а):
CyberMax писал(а):
VladimirT писал(а):И у меня вопрос. Две автономных базы на одном сервере. Хотелось бы справочник из одной пользовать в другой. Возможно ли это из встроеных процедур, триггеров, представлений, дабы клиент коннектился только к одной базе?
Володя, тебе только что объяснили, что либо внешние таблицы, либо никак. Прочитай весь топик, а не первые два поста.
Не забываем при эторм про особенности внешних таблиц, как, например, работа с "update".
Да, внешние таблицы не поддерживают Update и Delete. Извините, что не уточнил это. Собственно, об этом написано в документациях.

Ответить