powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / получение рекордсета от DB2-procedure на SQL Server
10 сообщений из 10, страница 1 из 1
получение рекордсета от DB2-procedure на SQL Server
    #32217710
Ally
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поможите, люди добрые! (копия вопля из ветки MS SQL)

Есть MS SQL 2000, есть linked server (AS/400 DB2), нужно с него данные получать.
раньше получали так:

EXEC sp_executesql N'
INSERT INTO #MsTable SELECT * FROM OPENQUERY (
LinkedDB2 , ''SELECT * FROM DB2TABLE'') '

И всё прекрасно работало.
Теперь вместо таблицы на сервере DB2 есть процедура, возвращающая рекордсет.
НО: ежели мы напишем

EXEC sp_executesql N'
INSERT INTO #MsTable SELECT * FROM OPENQUERY (
LinkedDB2 , ''CALL DB2PROCEDURE(''DB2TABLE'')'') '

то нам скажут: "The OLE DB provider ['MSDASQL'|'IBMDA400'-пробовал и через OLEDB и через ODBC] indicates that the object has no columns."

(А сама процедура действительно рекордсет возвращает - например Access из того же источника прекрасно его отображает)

Как быть?
Как данные получить?

P.S.
В М$ на этот счет есть даже Microsoft Knowledge Base Article - 297368
(http://support.microsoft.com/default.aspx?scid=kb;en-us;297368),
где эта бяка описывается, и вот причина:
"OpenQuery needs metadata about the columns at compile time. To retrieve the metadata, OpenQuery makes OLE DB calls which eventually execute the query with the SET FMTONLY ON option. As a result, OpenQuery fails to execute. Because of this behavior, queries that do not return metadata about columns, such as SQL Server stored procedures, cannot be run by using OpenQuery."

Похоже, что DB2-процедура никаких метаданных о полях не возвращает, ибо вообще может возвращать рекордсеты с различным набором полей в зависимости от входных параметров, и посему бессмысленно пытаться что-то определить о её возврате в "compile time".
...
Рейтинг: 0 / 0
получение рекордсета от DB2-procedure на SQL Server
    #32217758
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Похоже, что DB2-процедура никаких метаданных о полях не возвращает

возвращает

>ибо вообще может возвращать рекордсеты с различным набором полей в
зависимости от входных параметров,

абсолютно верно

и посему бессмысленно пытаться что-то определить о её возврате в "compile time

и это тоже абсолютно верно
...
Рейтинг: 0 / 0
получение рекордсета от DB2-procedure на SQL Server
    #32217759
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Похоже, что DB2-процедура никаких метаданных о полях не возвращает

возвращает

>ибо вообще может возвращать рекордсеты с различным набором полей в
зависимости от входных параметров,

абсолютно верно

и посему бессмысленно пытаться что-то определить о её возврате в "compile time

и это тоже абсолютно верно
...
Рейтинг: 0 / 0
получение рекордсета от DB2-procedure на SQL Server
    #32217768
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к тому же она может возвратить несколько рекодсетов,
опять-таки кол-во рекордсетов может зависить от параметров :)
...
Рейтинг: 0 / 0
получение рекордсета от DB2-procedure на SQL Server
    #32217838
Ally
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>NewYear:
>возвращает
Т.е. если я понял, ASка адекватно отрабатывает запросы по вызову процедур с выставленным SET FMTONLY ON ?

Так почему СклСервак ничего не видит? (при том, что аналогичный финт, если источником является другой SQL-сервак, работает за милую душу)
Как получить рекордсет?
Кто-нть занимался репликацией из DB2 на SqlServer с участием процедур?
Как вы это делали?
...
Рейтинг: 0 / 0
получение рекордсета от DB2-procedure на SQL Server
    #32217854
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я не знаю, что такое SET FMTONLY ON
метаданные можно получить через describe into, например.
>Так почему СклСервак ничего не видит?
энто уже не ко мне :) про СклСервак почти ничего не знаю.
...
Рейтинг: 0 / 0
получение рекордсета от DB2-procedure на SQL Server
    #32217897
IBMer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если хотите делать распределенные запросы которые будут оптимизороваться DB2 оптимизатором Велькам то DB2 Information Integrator. Так же может делать репликацию.
...
Рейтинг: 0 / 0
получение рекордсета от DB2-procedure на SQL Server
    #32218099
Ally
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, я не хочу делать распределенных запросов.
Мне нужно просто среплицировать данные из DB2 при условии, что мне разрешено обращаться только к процедуре-аксессору (работающую с авторизацией *OWNER), а вот ни к 1 таблице или вьюшке доступа нет.

P.S.
Тут попробовал такую штуку:
Поставил прокладку между DB2 и MSSQL:
В базе MS Access сделал запрос на DB2 (вызов ентой процедуры), а затем, прописав эту базу, как ODBC-источник, сделал на SQL-сервере SELECT из неё.
Рекордсет был получен! Как ни в чем не бывало!

А напрямую-то почему не работает?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
получение рекордсета от DB2-procedure на SQL Server
    #32871051
Road Runner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как я тебя понимаю! Мы сами мучаемся с доступом через СП-шки.
Первый раз были мучения - доступ дали даже не к самой дб2, а к MS SQL, на котормо работала расширенная хранимка, которая обращалась к дб2. Проблему получения данных и помещения их в таблицу решили через DTS с написанием простенькой процедурки маппинга на VB.

Второй раз - надо на локальной DB2 получить табличный набор из результата работы процедуры на удаленном сервере DB2, а дб2 не умеет коннектиться из хранимок на удаленные сервера, не позволяет создавать federated хранимки и вообще не считает результаты работы своих процедур табличными объектами (буду рад услышать, что все это не так). :( Сейчас проблема решается так - есть хранимка, которая запускает отдельный екзешник, от которого и получает информацию. Правда пока не получает - отчего-то ODBC у меня отказывается выполнять запросы по вызову процедур с параметрами (вызов процедур без параметра или запросы без процедур выполняются). Пока боремся.
...
Рейтинг: 0 / 0
получение рекордсета от DB2-procedure на SQL Server
    #32871052
Road Runner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ох, не посмотрел на дату сообщений! :)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / получение рекордсета от DB2-procedure на SQL Server
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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