Endlich ein paar Lösungen aufgespürt – der Schlüssel zum Problem (für uns) ist, dass standardmäßig RPCs für Verbindungsserver deaktiviert sind. Die Parameter für Rpc, Rpc Out und Use Remote Collation müssen auf true gesetzt werden. Weitere Informationen:
Welche Lösung Sie verwenden, hängt von den Ausgangsanforderungen des Verfahrens ab. Das erste Beispiel gibt einen Ausgabewert zurück. Beim zweiten Beispiel werden keine Ausgabewerte zurückgegeben (Daten werden in einer nachfolgenden Abfrage gesammelt).
Beispiel 1
Die Prozedur T2T_collect_all hat zwei Eingabeparameter (Start- und Enddatum) und einen Ausgabeparameter (Zeilenanzahl).
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 ganze Zahl
SET @l_i_parameter1 ='2009/10/01'
SET @l_i_parameter2 ='JJJJ/MM/TT'
SET @l_i_parameter3 ='2009/12/31'
SET @l_i_parameter4 ='JJJJ/MM/TT'
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
) BEI ORA_DB;
Weitere Informationen:http://blogs.msdn.com/joaquinv/archive/2008/10/23/execute-oracle-stored-procedure-in-sql-server.aspx
Beispiel 2a
Die Prozedur T2T_collect_allx hat nur zwei Eingabeparameter (Start- und Enddatum).
EXECUTE ('begin T2T_collect_allx (SYSDATE - 40, SYSDATE); end;') ORA_DB;
Beispiel 2b
SELECT * FROM OPENQUERY(ORA_DB, 'begin T2T_collect_allx (SYSDATE - 40, SYSDATE ); end;')