Страница 1 из 1
РАБОТА С РАЗНЫМИ БД В ОДНОМ ЗАПРОСЕ
Добавлено: 22 июн 2006, 20:54
Vladimir03
В одной хорошей книге написано, что в одном запросе можно использовать таблицы из разных БД. В этом случае имя таблицы указывается в формате :ПсевдонимБД:ИмяТаблицы. Но там еще написано, что все это действует только в приложении или утилите, использующей BDE. С момента опубликования этой книги прошло уже очень много времени. Нельзя ли в утилитах для Interbase/Firebird использовать что-нибудь подобное? Если есть такая возможность, то напишите, пожалуйста, каким образом, или никак нельзя. Просто хотелось бы при экспорте данных из одной базы в другую использовать более гибкие условия, чем через скрипты и backup/restore.
Добавлено: 22 июн 2006, 21:30
Merlin
Имею встречный вопрос: как выглядит именно один запрос из обоих баз сразу, требующийся именно при экспорте из одной базы в другую? Примерно хотя бы.
Добавлено: 22 июн 2006, 22:50
Vladimir03
Merlin писал(а):Имею встречный вопрос: как выглядит именно один запрос из обоих баз сразу, требующийся именно при экспорте из одной базы в другую? Примерно хотя бы.
Например:
Код: Выделить всё
SELECT U.*
FROM ":MONITOR:NLS" N, ":DWH:OLAP_UPE" U
WHERE
U.SC_CODE = N.COD_SCENARIO
ORDER BY U.SC_CODE

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