W końcu wyśledziliśmy kilka rozwiązań – kluczem do problemu (dla nas) jest to, że domyślnie RPC są wyłączone dla serwerów połączonych. Parametry Rpc, Rpc Out i Use Remote Collation muszą być ustawione na true. Więcej informacji:
Zastosowane rozwiązanie będzie zależeć od wymagań wyjściowych procedury. Pierwszy przykład zwraca wartość wyjściową. W drugim przykładzie nie są zwracane żadne wartości wyjściowe (dane są zbierane w kolejnym zapytaniu).
Przykład 1
Procedura T2T_collect_all ma dwa parametry wejściowe (daty rozpoczęcia i zakończenia) i jeden parametr wyjściowy (liczba wierszy).
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 liczba całkowita
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'
USTAW @l_o_parametr1 =0
WYKONAJ ( 'begin T2T_collect_all(do_date(?, ?), to_date(?, ?), ? ); end;',
@l_i_parameter1,
@l_i_parameter2,
@l_i_parameter3,
@l_i_parameter4,
@l_o_parameter1 OUTPUT
) W ORA_DB;
Więcej informacji:http://blogs.msdn.com/joaquinv/archive/2008/10/23/execute-oracle-stored-procedure-in-sql-server.aspx
Przykład 2a
Procedura T2T_collect_allx ma tylko dwa parametry wejściowe (daty rozpoczęcia i zakończenia).
EXECUTE ('rozpocznij T2T_collect_allx (SYSDATE - 40, SYSDATE); koniec;') ORA_DB;
Przykład 2b
SELECT * Z OPENQUERY(ORA_DB, 'rozpocznij T2T_collect_allx (SYSDATE - 40, SYSDATE); koniec;')