Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запрос к Линкованому серверу Ораклу MSSQL 2012  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 901
Пытаемся переехать на MS SQL SQl2012 c 2008r2
есть проблема в запросах к связанным серверам.
Запрос
declare @par1 varchar(12), 
		@par2 int, 
		@dt datetime, 
		@par3 float, 
		@dtact datetime 

	

EXEC ( 'begin SYSDBA.OPP.GET_RES(?,?,?,?,?,?); end;', 
'O0CE',
@par1 OUTPUT,
@par2 OUTPUT,
@dt OUTPUT,
@par3 OUTPUT,
@dtact OUTPUT )  AT ORALink 

в 2008r2 выполняется
в 2012 не выполняется, ошибка
Msg 7215, Level 17, State 1, Line 9
Could not execute statement on remote server 'SLXORA'.


2008r2 на ОС 2008
2012 на ОС 2012
Настройки связанных серверов идентичны. rpcout включено.
Что не так?
2 апр 14, 09:39    [15819618]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к Линкованому серверу Ораклу MSSQL 2012  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 901
запросы через OPENQUERY к данному серверу выполняются
2 апр 14, 09:56    [15819670]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к Линкованому серверу Ораклу MSSQL 2012  [new]
Glory
Member

Откуда:
Сообщений: 104751
Slava_Nik
запросы через OPENQUERY к данному серверу выполняются

А EXEC без параметров ? С явными значениями для аргументов ?
2 апр 14, 10:45    [15819895]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к Линкованому серверу Ораклу MSSQL 2012  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 901
Glory,

параметры то это для возвращаемых значений.
не знаю как написать с возвращаемыми значениями, но так написал
EXEC ( 'begin SYSDBA.OPP.GET_RES(''O0CE'','''','''','''','''',''''); end;') AT ORALink

то ошибка
OLE DB provider "OraOLEDB.Oracle" for linked server "ORALink " returned message "ORA-06550: Строка 1, столбец 68:
PLS-00363: выражение '<null>' не м.б. использовано как адресат назначения
ORA-06550: Строка 1, столбец 71:
PLS-00363: выражение '<null>' не м.б. использовано как адресат назначения
ORA-06550: Строка 1, столбец 74:
PLS-00363: выражение '<null>' не м.б. использовано как адресат назначения
ORA-06550: Строка 1, столбец 77:
PLS-00363: выражение '<null>' не м.б. использовано как адресат назначения
ORA-06550: Строка 1, столбец 80:
PLS-00363: выражение '<null>' не м.б. использовано как адресат назначения
ORA-06550: Строка 1, столбец 7:
PL/SQL: Statement ignored".
т.е запрос в оракл уходит, ошибку дает.
2 апр 14, 11:02    [15819973]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к Линкованому серверу Ораклу MSSQL 2012  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 901
разобрался как написать полностью для оракла запрос
но теперь надо запросить полные параметры по типам у ораклистов данной процедуры ,
2 апр 14, 11:31    [15820132]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к Линкованому серверу Ораклу MSSQL 2012  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 901
немного продвинулся ,
запрос выполняется в таком виде:
EXEC ( 'declare par1 varchar2(500);
par2 int;
dt date;
par3 float;
dtact date;
 begin SYSDBA.OPP.GET_RES
(''O0CE'',par1,par2,dt  ,par3,dtact); 
 end;') 
 AT ORALink 

только как теперь получить OUPTUT параметры, тк. сейчас результат просто (1 row(s) affected)
@par2 int,
@dt datetime,
@par3 float,
@dtact datetime

и запихнуть параметр 1?
Запихнуть параметр 1 можно через динамический запрос составить текст и затем execute.
а как получить параметры?

еще раз для новеньких, в 2008r2 все выполнялось, в 2012 нет
я уже заметил , что в 2012 в этом плане поменялось, т.к у другой системы так же при миграции на 2012 эта проблема была, но в немного другом ракурсе.
2 апр 14, 14:31    [15821578]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к Линкованому серверу Ораклу MSSQL 2012  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 901
Как еще можно получить output параметры из процедур Оракла?
2 апр 14, 16:39    [15822656]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к Линкованому серверу Ораклу MSSQL 2012  [new]
SadJester
Member

Откуда:
Сообщений: 29
Хочу добавить подробностей к описанию проблемы.
Если использовать вызов процедуры без параметров или только с передаваемыми к Ораклу параметрами, то отрабатывается все корректно.
Как только мы пытаемся получить из Оракла OUTPUT параметр - бах и ошибка.
2 апр 14, 17:49    [15823133]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к Линкованому серверу Ораклу MSSQL 2012  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8826
Я не особо большой знаток Оракле.
Процедуры Оракла не возвращают наборов данных подобно сиквелу. Вместо этого можно получить OUTPUT переменные и создать из них набор.
Что-то вроде:
DECLARE
c_ref            SYS_REFCURSOR;
BEGIN
... получили переменные
OPEN c_ref FOR SELECT @var1 FROM DUAL;
END;
2 апр 14, 18:19    [15823314]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к Линкованому серверу Ораклу MSSQL 2012  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 901
Владислав Колосов
Я не особо большой знаток Оракле.
Процедуры Оракла не возвращают наборов данных подобно сиквелу. Вместо этого можно получить OUTPUT переменные и создать из них набор.
Что-то вроде:
DECLARE
c_ref            SYS_REFCURSOR;
BEGIN
... получили переменные
OPEN c_ref FOR SELECT @var1 FROM DUAL;
END;

возвращают)
у нас код работает в 2008 , но не работает в 2012.
Не работает код c процедурами Оракла, у которых есть параметры OUTPUT
2 апр 14, 23:33    [15824406]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к Линкованому серверу Ораклу MSSQL 2012  [new]
Glory
Member

Откуда:
Сообщений: 104751
Slava_Nik
у нас код работает в 2008 , но не работает в 2012.

Разные Оракл драйвера ???
3 апр 14, 09:30    [15825215]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к Линкованому серверу Ораклу MSSQL 2012  [new]
SadJester
Member

Откуда:
Сообщений: 29
Glory
Разные Оракл драйвера ???

К сожалению одинаковые.
3 апр 14, 09:39    [15825255]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к Линкованому серверу Ораклу MSSQL 2012  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8826
Попробуйте скачать свежего OLEDB провайдера для Oracle...

Возвращают функции, а не процедуры. Или у Вас какой-то особый Оракл :)
3 апр 14, 11:25    [15825932]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к Линкованому серверу Ораклу MSSQL 2012  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 901
Владислав Колосов
Попробуйте скачать свежего OLEDB провайдера для Oracle...

Возвращают функции, а не процедуры. Или у Вас какой-то особый Оракл :)

процедуры с параметрами OUT
PROCEDURE GET_RES(in_SLX_ID IN VARCHAR2,
out_ID OUT VARCHAR2,
out_DURATION OUT INT,
out_FIRSTDAY OUT DATE,
out_VOL OUT FLOAT,
out_ACTDATE OUT DATE)
3 апр 14, 11:38    [15826052]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к Линкованому серверу Ораклу MSSQL 2012  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8826
Я говорил о двумерных наборах данных (таблицах, если хотите), а не OUTPUT параметрах... Неужели так непонятно написал? :(
3 апр 14, 11:46    [15826132]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к Линкованому серверу Ораклу MSSQL 2012  [new]
SadJester
Member

Откуда:
Сообщений: 29
Кажется, что дело не в бобине...
У нас SQL 2012 развернут на Windows 2012R2.
Клиент Оракла по-ходу просто не поддерживает эту ОС.
Был ли у кого опыт установки Ораклового клиента на Win 2012R2?
3 апр 14, 15:22    [15827660]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить