Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Вызов хранимок DB2 в MS SQL через провайдеры DB2OLEDB и MSDASQL / 11 сообщений из 11, страница 1 из 1
28.10.2013, 11:02
    #38443115
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов хранимок DB2 в MS SQL через провайдеры DB2OLEDB и MSDASQL
Приветствую!

Не поддерживается вызов хранимок DB2 в MS SQL через провайдеры DB2OLEDB и MSDASQL.

Простой вызов SP: The OLE DB provider "DB2OLEDB" for linked server "spddatservvDATT3" indicates that either the object has no columns or the current user does not have permissions on that object.
Со вставкой в темповую таблицу: The requested operation could not be performed because OLE DB provider "DB2OLEDB" for linked server "spddatservvDAT3" does not support the required transaction interface.

Процедура возвращает, что то:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
                     
     SET STR_EXEC = 'select    
     NAME       as NAME         ,
     coalesce(START_COUN,0)       as  START_COUN    ,
     ,ID_FINTOOL
     from SESSION.TTT';
     PREPARE s1 FROM  STR_EXEC ; 
     OPEN    c1;



Как быть? Проблем с функцией возвращающих таблицу нет! В функции полную динамику повторить скорее всего не смогу...
...
Рейтинг: 0 / 0
29.10.2013, 10:44
    #38444563
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов хранимок DB2 в MS SQL через провайдеры DB2OLEDB и MSDASQL
И так пытаюсь удаленно запустить процедуру DB2, возвращающую курсор удаленно на SQL2012

Покопался - так работает:
EXEC('CALL WEB.TEST_DATA') at spddatservv

А вот с любым параметром нет:
Код: plsql
1.
EXEC('CALL WEB.TEST_DATA_I ( 11499 )')  at spddatservv


И так не работает:
Код: plsql
1.
EXEC('CALL WEB.TEST_DATA_I (id=>11499 )')  at spddatservv



Пишет, что доступа нет
OLE DB provider "DB2OLEDB" for linked server "spddatservv" returned message "Routine "" (specific name "") is implemented with code in library or path "", function "" which cannot be accessed. Reason code: "". SQLSTATE: 42724, SQLCODE: -444".


Может кто сталкивался с таковой проблемой. Монстры DB2, может подскажите куда копать?
...
Рейтинг: 0 / 0
29.10.2013, 11:56
    #38444692
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов хранимок DB2 в MS SQL через провайдеры DB2OLEDB и MSDASQL
Сам разобрался:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE OR REPLACE PROCEDURE WEB.TEST_DATA_K ( ID_ INT)
  DYNAMIC RESULT SETS 1
  LANGUAGE SQL
  NOT DETERMINISTIC
  EXTERNAL ACTION
  MODIFIES SQL DATA
  INHERIT SPECIAL REGISTERS
begin
    DECLARE STR_EXEC   VARCHAR(32000);
    declare c1 cursor with return for s1;
    set STR_EXEC =   'select * from FORM.BANKK where ID_PERSON = ' || CAST(ID_ as varchar(10)) ;
    PREPARE s1 FROM  STR_EXEC ; 
    OPEN    c1;
end;

-- call  WEB.TEST_DATA_K (11499) так вызывать на db2



А вот так на SQL:
Код: plsql
1.
EXEC('call  WEB.TEST_DATA_K (?)',11499)  at spddatservv
...
Рейтинг: 0 / 0
29.10.2013, 12:27
    #38444751
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов хранимок DB2 в MS SQL через провайдеры DB2OLEDB и MSDASQL
medoed,

Там с датами в параметрах , гемор ещё тот , может кому пригодится:

-- на DB2 так
Код: plsql
1.
call WEB.VOL_KOT_15012(41119,1,'2013-01-01', '2013-02-01', '0001-01-01');



Для того, чтобы вызвать на SQL сервере - примерно так:
Код: plsql
1.
2.
3.
4.
5.
declare @par1 varchar(12) =  convert(varchar(12),CAST('2013-01-01' as DATE),104)
declare @par2 varchar(12) =  convert(varchar(12),CAST('2013-02-01' as DATE),104)
declare @par3 varchar(12) =  convert(varchar(12),CAST('1900-01-01' as DATE),104)

EXEC('call WEB.VOL_KOT_15012(?,?,?,?,?)', 41119,1,@par1,@par2,@par3) at spddat3
...
Рейтинг: 0 / 0
30.10.2013, 22:23
    #38447514
Gobzo Kobler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов хранимок DB2 в MS SQL через провайдеры DB2OLEDB и MSDASQL
medoed,

Пытаюсь вызвать хранимую процедуру iSeries 5.04 в SSRS 2008R2, она исполняется, но не показывает SSRS свои колонки.
Вразумительных ответов пока ни от кого получить не смог.

Вот что я пробовал:

на SSRS в датасете используется Provider=IBMDASQL
вызов процедуры CALL TESTDAT.REPORT(?)

на iSeries текст тестовой процедуры (она зовет табличную функцию):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE PROCEDURE TESTDAT.REPORT (IN STRT DATE)
DYNAMIC RESULT SETS 1
LANGUAGE SQL READS SQL DATA
BEGIN
	DECLARE CSR1 CURSOR WITH RETURN FOR
	SELECT * FROM
	TABLE(TESTDAT.DATESDEP(STRT)) AS DD;

	OPEN CSR1;
	RETURN;
END


Использовать PREPARE ... FROM ... вроде бы невозможно, потому что текст запроса очень большой - 16кб.
Интересно, что из этой же самой процедуры данные возвращаются через клиент SquirrelSql с драйвером JTOpen(AS/400).

Что посоветуете? Нужно ли устанавливать OLE DB Provider для DB2? Протестировать пока не могу - лаптоп дали только с Standard Edition.
...
Рейтинг: 0 / 0
30.10.2013, 22:26
    #38447518
Gobzo Kobler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов хранимок DB2 в MS SQL через провайдеры DB2OLEDB и MSDASQL
Да, вот еще - через SquirrelSql вызов процедуры осуществляется выражением

CALL TESTDAT.CMSREPORT (DATE('10/23/2013'))

и так работает. А про SSRS я выше слегка напутал - процедура исполняется, но не возвращает данных, если в качестве источника данных задать Stored Procedure и выбрать ее название, а через CALL не выполняется.
...
Рейтинг: 0 / 0
31.10.2013, 15:50
    #38448556
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов хранимок DB2 в MS SQL через провайдеры DB2OLEDB и MSDASQL
Gobzo Koblermedoed,

Пытаюсь вызвать хранимую процедуру iSeries 5.04 в SSRS 2008R2, она исполняется, но не показывает SSRS свои колонки.
Вразумительных ответов пока ни от кого получить не смог.

Вот что я пробовал:

на SSRS в датасете используется Provider=IBMDASQL
вызов процедуры CALL TESTDAT.REPORT(?)

на iSeries текст тестовой процедуры (она зовет табличную функцию):
[src]
Что посоветуете? Нужно ли устанавливать OLE DB Provider для DB2? Протестировать пока не могу - лаптоп дали только с Standard Edition.
У меня под windows и DB2-9.0 и MSSQL-2012. Драйвер нужен, OleDb вроде имеет минимальное количество глюков, см. картинку прилинкованного сервера DB2.
...
Рейтинг: 0 / 0
31.10.2013, 18:04
    #38448844
Gobzo Kobler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов хранимок DB2 в MS SQL через провайдеры DB2OLEDB и MSDASQL
medoed,

Вот что у меня пока получилось:

1. Добавляем в файл C:\Program Files\Microsoft Visual Studio 9\Common7\IDE\PrivateAssemblies в секцию Data тэг

Код: xml
1.
<Extension Name="DB2UDB" Type="IBM.Data.DB2.iSeries.iDB2Connection,IBM.Data.DB2.iSeries, Version=12.0.0.0, Culture=neutral, PublicKeyToken=9CDB2EBFB1F93A26"/>



и в секцию Designer тэг

Код: xml
1.
<Extension Name="DB2UDB" Type="Microsoft.ReportingServices.QueryDesigners.GenericQueryDesigner,Microsoft.ReportingServices.QueryDesigners"/>



Это включает провайдер DB2UDB.Net в BI Studio.

2. Создаем новый проект, в нем создаем Shared datasource с этим провайдером, в качестве строки соединения даем IP iSeries и имя базы, пользователя и пароль (если есть).
3. Создаем новый отчет, указав источник из 2 и введя запрос SELECT * FROM sysibm.sysdummy1.
4. Открываем отчет и меняем тип запроса на хранимую процедуру, затем идем в Parameters и руками создаем все параметры (важно: параметры типа Date вбиваются как Text, иначе потом отчет не будет выполняться из-за Conversion error). Сохраняем отчет.
5. Идем обратно в Shared datasource и меняем Credentials на No credentials.
6. Теперь если хранимая процедура имеет Public execute permissions, то наш отчет выполнится. Как правильно настроить credentials я пока не разбирался, но вроде данные в отчет идут и с этим разобраться можно будет позже.
...
Рейтинг: 0 / 0
31.10.2013, 18:07
    #38448847
Gobzo Kobler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов хранимок DB2 в MS SQL через провайдеры DB2OLEDB и MSDASQL
Да, вот еще:

При создании параметра слева вбиваем его имя как в процедуре, а справа ставим перед ним же собаку и окружаем квадратрыми скобками, вот так [@paramname]. Даты в default values и в значения вбиваем без кавычек.
...
Рейтинг: 0 / 0
31.10.2013, 19:08
    #38448924
Gobzo Kobler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов хранимок DB2 в MS SQL через провайдеры DB2OLEDB и MSDASQL
Решение для credentials оказалось совсем простым: добавление UserID=mgr;Password=mgr; к строке соединения.
...
Рейтинг: 0 / 0
31.10.2013, 21:54
    #38449023
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов хранимок DB2 в MS SQL через провайдеры DB2OLEDB и MSDASQL
Рад за вас, что все получилось:-) Я просто не из Visual Studio, а из Managment Studio запускал.
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Вызов хранимок DB2 в MS SQL через провайдеры DB2OLEDB и MSDASQL / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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