Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Помогите: один запрос к MS SQL и Oracle (число прочтений - 6878 )
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Помогите: один запрос к MS SQL и Oracle
14. Апреля 2008 :: 11:51
Печать  
Подозреваю, что сие возможно, но не хватает тямы.

Хочу получить в ТЗ данные из 2-х баз на Oracle и MS SQL 2000 (родная 1С) одним запросом. Запрос простой. Требуется из оракла выбрать коды альтернативных товаров по переданному в запрос коду товара, и в этой же выборке получить элементы справочника ТМЦ, найденные по коду этих найденных альтернатив в оракле.

Дилетантски делаю так, без надежды на работоспособность:
Код
Выбрать все
Процедура ПриОткрытии()
	MD=CreateObject("MetaDataWork");
	TMZ="sp"+MD.ИДСправочника("ТМЦ");
	DB=СоздатьОбъект("OLEDBData");
	DB.Соединение("Provider=MSDASQL.1;Password=***;Persist Security Info=True;User ID=***;Data Source=***;Mode=Read;");
	Команда=DB.СоздатьКоманду();
	Команда.Отладка(1);
	Команда.ДобПараметр(1,129,11,0,0);
	Попытка
		Команда.Подготовить("select alt.ALT_DART_NO, tmz.id as [Nomen $Справочник.ТМЦ] from DS_ALTERDART as alt, [rom].[db1c77].[dbo]."+TMZ+" as tmz where alt.ORG_DART_NO = ? and tmz.id = alt.ALT_DART_NO");
	Исключение
		DB.Закрыть();
	КонецПопытки;
КонецПроцедуры

Процедура Сформировать()
	Команда.УстановитьПараметр(1,СокрЛП(ДартНомер.Код));
	Команда.ВыполнитьИнструкцию(,ТЗ);
КонецПроцедуры
 


... и ессно получаю FAILED! ICommandText::Execute(): [Oracle][ODBC][Ora]ORA-00923: FROM keyword not found where expected

Может кто знает как это делается грамотно и правильно? Окажите любезность, плз!
Или хотя бы пните в нужном направлении...  Улыбка
  
Наверх
ICQ  
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Помогите: один запрос к MS SQL и Oracle
Ответ #1 - 14. Апреля 2008 :: 12:20
Печать  
Наверное грустный вопрос получился  Печаль
  
Наверх
ICQ  
IP записан
 
grayrat
Junior Member
**
Отсутствует



Сообщений: 99
Местоположение: Russia, Moscow
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: Помогите: один запрос к MS SQL и Oracle
Ответ #2 - 14. Апреля 2008 :: 12:46
Печать  
А если к MSSQL прилинковать оракловский сервер?
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Помогите: один запрос к MS SQL и Oracle
Ответ #3 - 14. Апреля 2008 :: 12:53
Печать  
grayrat писал(а) 14. Апреля 2008 :: 12:46:
А если к MSSQL прилинковать оракловский сервер?

Только так и можно сделать такой запрос.  Но тут есть некоторые моменты - смысл в том что при таком joine линкованная таблица полностью копируется с сервера на сервер, поэтому выигрышь в скорости очень сомнителен. Лучше делай два запроса к разным базам
  
Наверх
ICQ  
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Помогите: один запрос к MS SQL и Oracle
Ответ #4 - 14. Апреля 2008 :: 13:06
Печать  
Nick писал(а) 14. Апреля 2008 :: 12:53:
grayrat писал(а) 14. Апреля 2008 :: 12:46:
А если к MSSQL прилинковать оракловский сервер?

Только так и можно сделать такой запрос.  Но тут есть некоторые моменты - смысл в том что при таком joine линкованная таблица полностью копируется с сервера на сервер, поэтому выигрышь в скорости очень сомнителен. Лучше делай два запроса к разным базам

Если действительно при sp_addlinkedserver оракловские таблицы, участвующие в запросе, копируются целиком на сервер, то придется отказаться от этой идеи...
  
Наверх
ICQ  
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Помогите: один запрос к MS SQL и Oracle
Ответ #5 - 16. Апреля 2008 :: 14:35
Печать  
Nick писал(а) 14. Апреля 2008 :: 12:53:
grayrat писал(а) 14. Апреля 2008 :: 12:46:
А если к MSSQL прилинковать оракловский сервер?

Только так и можно сделать такой запрос.  Но тут есть некоторые моменты - смысл в том что при таком joine линкованная таблица полностью копируется с сервера на сервер, поэтому выигрышь в скорости очень сомнителен. Лучше делай два запроса к разным базам

После продолжительных танцов с бубнами прилинковал таки я оракловскую базу к своему MS SQL 2000 серваку.
В ананалайзере делаю запрос:
Код
Выбрать все
set nocount on select * from OPENQUERY(ORA, 'select ALT_DART_NO, ALT_TYPE from DS_ALTERDART where ORG_DART_NO = ''**********''') 


который благополучно выдает мне нужный результат. Время выполнения запроса не более 3 сек. Мелкомягкий скуль находится рядом, в локалке (Киев). Прилинкованая оракловская база лежит относительно далеко,  на серваке где-то около побережья Ла-Манша (без шуток). В таблице, откуда извлекаются данные, 25000 строк и 5 колонок.
Вот и берет меня сомненье, что скуль тащит на разборки всю таблицу к себе домой! Ваша информация на 100% верна?
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Помогите: один запрос к MS SQL и Oracle
Ответ #6 - 16. Апреля 2008 :: 14:44
Печать  
Ну может на для разных СУБД механизмы используются разные но вот например:
http://www.xserver.ru/computer/database/sql/4/
  
Наверх
ICQ  
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Помогите: один запрос к MS SQL и Oracle
Ответ #7 - 16. Апреля 2008 :: 14:48
Печать  
Молоток капет, я тоже этим пользовался когда не получалось через айпишник (может тупил), в разных подсетях
Вроде ексель тоже так делает, через OPENQUERY
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Помогите: один запрос к MS SQL и Oracle
Ответ #8 - 16. Апреля 2008 :: 14:52
Печать  
Так насколько я понимаю у тебя не расределенный запрос получается
  
Наверх
ICQ  
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Помогите: один запрос к MS SQL и Oracle
Ответ #9 - 16. Апреля 2008 :: 14:56
Печать  
Nick писал(а) 16. Апреля 2008 :: 14:44:
Ну может на для разных СУБД механизмы используются разные но вот например:
http://www.xserver.ru/computer/database/sql/4/

При джойнах возможно так и происходит, но не в моем случае. Кстати, в примере есть и решение подобной проблемы.
Вот статистика вышеприведенного запроса (включено SET STATISTICS TIME ON)

SQL Server parse and compile time:
   CPU time = 0 ms, elapsed time = 136 ms.

SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.

SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.


SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 72 ms.
  
Наверх
ICQ  
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Помогите: один запрос к MS SQL и Oracle
Ответ #10 - 16. Апреля 2008 :: 14:59
Печать  
Nick писал(а) 16. Апреля 2008 :: 14:52:
Так насколько я понимаю у тебя не расределенный запрос получается

Это только заготовка-тренировка в области со сплошными белыми пятнами для меня. Предполагается именно распределенный запрос.
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Помогите: один запрос к MS SQL и Oracle
Ответ #11 - 16. Апреля 2008 :: 15:00
Печать  
Цитата:
Кстати, в примере есть и решение подобной проблемы.

Сложно назвать REMOTE JOINE решением этой проблемы.
  
Наверх
ICQ  
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Помогите: один запрос к MS SQL и Oracle
Ответ #12 - 16. Апреля 2008 :: 15:03
Печать  
Nick писал(а) 16. Апреля 2008 :: 15:00:
Цитата:
Кстати, в примере есть и решение подобной проблемы.

Сложно назвать REMOTE JOINE решением этой проблемы.

На безрыбье ...
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Помогите: один запрос к MS SQL и Oracle
Ответ #13 - 16. Апреля 2008 :: 15:06
Печать  
По сути твой запрос это REMOTE JOINE с таблицей в которой 1 запись, а если их там 10?
3*10 = 30 сек, а если 100? Согласись это очень небольшое число Улыбка
  
Наверх
ICQ  
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Помогите: один запрос к MS SQL и Oracle
Ответ #14 - 16. Апреля 2008 :: 15:24
Печать  
Nick писал(а) 16. Апреля 2008 :: 15:06:
По сути твой запрос это REMOTE JOINE с таблицей в которой 1 запись, а если их там 10?
3*10 = 30 сек, а если 100? Согласись это очень небольшое число Улыбка

Математика возможно спорная. Как видно из статистики выше запрос выполняется за 72 ms. А разница между пересылкой одной записи в готовой выборке или 100 записей в готовой выборке должна быть несущественной. Или я чего-то недопонимаю? Сам оракловский запрос в данном случае выполняется вроде на удаленном сервере?
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать