Най-накрая открихме няколко решения – ключът към проблема (за нас) е, че RPC по подразбиране са деактивирани за свързани сървъри. Параметрите за Rpc, Rpc Out и Use Remote Collation трябва да бъдат зададени на true. Повече информация:
Решението, което използвате, ще зависи от изискванията за изход на процедурата. Първият пример връща изходна стойност. Във втория пример не се връщат изходни стойности (данните се събират в следваща заявка).
Пример 1
Процедурата T2T_collect_all има два входни параметъра (начална и крайна дата) и един изходен параметър (брой редове).
ДЕКЛАРИРАЙТЕ @l_i_parameter1 varchar(10)
ДЕКЛАРИРАЙТЕ @l_i_parameter2 varchar(10)
ДЕКЛАРИРАЙТЕ @l_i_parameter3 varchar(10)
ДЕКЛАРИРАЙТЕ @l_i_parameter4 varchar(10)
DECLARE @l_o_parameter1 цяло число
SET @l_i_parameter1 ='2009/10/01'
SET @l_i_parameter2 ='гггг/мм/дд'
SET @l_i_parameter3 ='2009/12/31'
SET @l_i_parameter4 ='гггг/мм/дд'
SET @l_o_parameter1 =0
EXECUTE ( 'begin T2T_collect_all(to_date(?, ?), to_date(?, ?), ?); край;',
@l_i_parameter1,
@l_i_parameter2,
@l_i_parameter3,
@l_i_parameter4,
@l_o_parameter1 OUTPUT
) В ORA_DB;
Повече информация:http://blogs.msdn.com/joaquinv/archive/2008/10/23/execute-oracle-stored-procedure-in-sql-server.aspx
Пример 2а
Процедурата T2T_collect_allx има само два входни параметъра (начална и крайна дата).
EXECUTE ('begin T2T_collect_allx (SYSDATE - 40, SYSDATE); край;') ORA_DB;
Пример 2b
SELECT * FROM OPENQUERY(ORA_DB, 'begin T2T_collect_allx (SYSDATE - 40, SYSDATE ); end;')