Nakonec jsme našli několik řešení – klíčem k problému (pro nás) je, že ve výchozím nastavení jsou RPC pro propojené servery zakázány. Parametry Rpc, Rpc Out a Use Remote Collation musí být nastaveny na hodnotu true. Více informací:
Řešení, které použijete, bude záviset na požadavcích na výstup procedury. První příklad vrací výstupní hodnotu. Druhý příklad nejsou vráceny žádné výstupní hodnoty (data se shromažďují v následném dotazu).
Příklad 1
Procedura T2T_collect_all má dva vstupní parametry (počáteční a koncové datum) a jeden výstupní parametr (počet řádků).
DECLARE @l_i_parameter1 varchar(10)
DECLARE @l_i_parameter2 varchar(10)
DECLARE @l_i_parameter3 varchar(10)
DECLARE @l_i_parameter4 varchar(10)
DECLARE @l_o_parameter1 integer
SET @l_i_parameter1 ='2009/10/01'
SET @l_i_parameter2 ='rrrr/mm/dd'
SET @l_i_parameter3 ='2009/12/31'
SET @l_i_parameter4 ='rrrr/mm/dd'
SET @l_o_parameter1 =0
EXECUTE ( 'begin T2T_collect_all(to_date(?, ?), to_date(?, ?), ? ); end;',
@l_i_parameter1,
@l_i_parameter2,
@l_i_parameter3,
@l_i_parameter4,
@l_o_parameter1 OUTPUT
) NA ORA_DB;
Další informace:http://blogs.msdn.com/joaquinv/archive/2008/10/23/execute-oracle-stored-procedure-in-sql-server.aspx
Příklad 2a
Procedura T2T_collect_allx má pouze dva vstupní parametry (počáteční a koncové datum).
EXECUTE ('begin T2T_collect_allx (SYSDATE – 40, SYSDATE); end;') ORA_DB;
Příklad 2b
SELECT * FROM OPENQUERY(ORA_DB, 'začátek T2T_collect_allx (SYSDATE - 40, SYSDATE ); konec;')