РАБОТА С РАЗНЫМИ БД В ОДНОМ ЗАПРОСЕ
-
- Сообщения: 15
- Зарегистрирован: 13 июн 2006, 07:54
РАБОТА С РАЗНЫМИ БД В ОДНОМ ЗАПРОСЕ
В одной хорошей книге написано, что в одном запросе можно использовать таблицы из разных БД. В этом случае имя таблицы указывается в формате :ПсевдонимБД:ИмяТаблицы. Но там еще написано, что все это действует только в приложении или утилите, использующей BDE. С момента опубликования этой книги прошло уже очень много времени. Нельзя ли в утилитах для Interbase/Firebird использовать что-нибудь подобное? Если есть такая возможность, то напишите, пожалуйста, каким образом, или никак нельзя. Просто хотелось бы при экспорте данных из одной базы в другую использовать более гибкие условия, чем через скрипты и backup/restore.
-
- Сообщения: 15
- Зарегистрирован: 13 июн 2006, 07:54
Например:Merlin писал(а):Имею встречный вопрос: как выглядит именно один запрос из обоих баз сразу, требующийся именно при экспорте из одной базы в другую? Примерно хотя бы.
Код: Выделить всё
SELECT U.*
FROM ":MONITOR:NLS" N, ":DWH:OLAP_UPE" U
WHERE
U.SC_CODE = N.COD_SCENARIO
ORDER BY U.SC_CODE
Видишь ли, Владимир. Я это давно описывал в www.ibase.ru/devinfo/bde.htm (интересно, какую книгу ты имеешь в виду?).
И популярно объяснил, каким образом можно выполнить такой запрос, и как это делает BDE.
Отсюда морал - со времен BDE ни в одном драйвере (ODBC, OLE DB, dbExpress, JDBC, и т.д) не появилось такой фигни. То есть, конечно Оракл и МССКЛ умеют работать с т.н. "linked servers", правда, совершенно таким же образом.
И популярно объяснил, каким образом можно выполнить такой запрос, и как это делает BDE.
Отсюда морал - со времен BDE ни в одном драйвере (ODBC, OLE DB, dbExpress, JDBC, и т.д) не появилось такой фигни. То есть, конечно Оракл и МССКЛ умеют работать с т.н. "linked servers", правда, совершенно таким же образом.
-
- Сообщения: 15
- Зарегистрирован: 13 июн 2006, 07:54
Понятно.kdv писал(а):Видишь ли, Владимир. Я это давно описывал в www.ibase.ru/devinfo/bde.htm (интересно, какую книгу ты имеешь в виду?).
И популярно объяснил, каким образом можно выполнить такой запрос, и как это делает BDE.
Отсюда морал - со времен BDE ни в одном драйвере (ODBC, OLE DB, dbExpress, JDBC, и т.д) не появилось такой фигни. То есть, конечно Оракл и МССКЛ умеют работать с т.н. "linked servers", правда, совершенно таким же образом.
А книга именуется Delphi 4 Руководство разработчика баз данных (В. В. Фаронов, П. В. Шумаков. 1999)
Конечно, все эти задачи можно проделать с двумя бд в приложении, из одной в качестве параметра данные брать в другую посредством двух компонентов IBDataSet, соединенных с двумя IBDatBase, но все это очень медленно.
Туплю я чо-то к вечеру несусветно. Не врубаюсь я, что он даёт для экспорта. Экспорт - эт што? Здесь возьми, суды полож. Два запроса, однако. Вот ежели говорить про простейшую репликацию, типа возьми здесь чего нет там и сложи туда, ещё как-то укладывается в голове. Однако такой запрос не катит для этого...Vladimir03 писал(а):Код: Выделить всё
SELECT U.* FROM ":MONITOR:NLS" N, ":DWH:OLAP_UPE" U WHERE U.SC_CODE = N.COD_SCENARIO ORDER BY U.SC_CODE
Ещё бы не медленно - IBDataSet не для того и предназначен. Для того предназначены либо 2 IBSQL, либо, на худой конец, два IBQuery. причём читающий тогда обязательно UniDirectional, пишушему-то пофиг, он не опенается, а екзекается. Главное чтоб был параметризованный, и собирался один раз, а не в цикле.Vladimir03 писал(а): Конечно, все эти задачи можно проделать с двумя бд в приложении, из одной в качестве параметра данные брать в другую посредством двух компонентов IBDataSet, соединенных с двумя IBDatBase, но все это очень медленно.
возможно имелось в виду что-то типа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
[отформатировано модератором]
-
- Заслуженный разработчик
- Сообщения: 644
- Зарегистрирован: 15 фев 2005, 11:34
Почему народ упорно не желает юзать внешние таблицы? Или типа того, что чем может и дурак пользоваться только дурак и будет пользоваться?
БД источник:
потом пулучившееся файло {скомкать раром и} отправить (хоть е-майлом и через диалап) на сервер с базой приемником.
БД приемник
[Отформатировано модератором]
БД источник:
Код: Выделить всё
insert into some_ext_table
...
select ... from some_int_table
БД приемник
Код: Выделить всё
insert into some_int_table
...
select ... from some_ext_table
И у меня вопрос. Две автономных базы на одном сервере. Хотелось бы справочник из одной пользовать в другой. Возможно ли это из встроеных процедур, триггеров, представлений, дабы клиент коннектился только к одной базе?Merlin писал(а):Имею встречный вопрос: как выглядит именно один запрос из обоих баз сразу, требующийся именно при экспорте из одной базы в другую? Примерно хотя бы.
Володя, тебе только что объяснили, что либо внешние таблицы, либо никак. Прочитай весь топик, а не первые два поста.VladimirT писал(а):И у меня вопрос. Две автономных базы на одном сервере. Хотелось бы справочник из одной пользовать в другой. Возможно ли это из встроеных процедур, триггеров, представлений, дабы клиент коннектился только к одной базе?
-
- Заслуженный разработчик
- Сообщения: 644
- Зарегистрирован: 15 фев 2005, 11:34
Не забываем при эторм про особенности внешних таблиц, как, например, работа с "update".CyberMax писал(а):Володя, тебе только что объяснили, что либо внешние таблицы, либо никак. Прочитай весь топик, а не первые два поста.VladimirT писал(а):И у меня вопрос. Две автономных базы на одном сервере. Хотелось бы справочник из одной пользовать в другой. Возможно ли это из встроеных процедур, триггеров, представлений, дабы клиент коннектился только к одной базе?
Да, внешние таблицы не поддерживают Update и Delete. Извините, что не уточнил это. Собственно, об этом написано в документациях.Ivan_Pisarevsky писал(а):Не забываем при эторм про особенности внешних таблиц, как, например, работа с "update".CyberMax писал(а):Володя, тебе только что объяснили, что либо внешние таблицы, либо никак. Прочитай весь топик, а не первые два поста.VladimirT писал(а):И у меня вопрос. Две автономных базы на одном сервере. Хотелось бы справочник из одной пользовать в другой. Возможно ли это из встроеных процедур, триггеров, представлений, дабы клиент коннектился только к одной базе?