Enfin trouvé quelques solutions - la clé du problème (pour nous) est que, par défaut, les RPC sont désactivés pour les serveurs liés. Les paramètres pour Rpc, Rpc Out et Use Remote Collation doivent être définis sur true. Plus d'informations :
La solution que vous utiliserez dépendra des exigences de sortie de la procédure. Le premier exemple renvoie une valeur de sortie. Dans le deuxième exemple, aucune valeur de sortie n'est renvoyée (les données sont collectées dans une requête ultérieure).
Exemple 1
La procédure T2T_collect_all a deux paramètres d'entrée (dates de début et de fin) et un paramètre de sortie (nombre de lignes).
DÉCLARER @l_i_parameter1 varchar(10)
DÉCLARER @l_i_parameter2 varchar(10)
DÉCLARER @l_i_parameter3 varchar(10)
DÉCLARER @l_i_parameter4 varchar(10)
DECLARE @l_o_parameter1 entier
SET @l_i_parameter1 ='2009/10/01'
SET @l_i_parameter2 ='aaaa/mm/jj'
SET @l_i_parameter3 ='2009/12/31'
SET @l_i_parameter4 ='aaaa/mm/jj'
SET @l_o_parameter1 =0
EXECUTER ( '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
) À ORA_DB ;
Plus d'informations :http://blogs.msdn.com/joaquinv/archive/2008/10/23/execute-oracle-stored-procedure-in-sql-server.aspx
Exemple 2a
La procédure T2T_collect_allx n'a que deux paramètres d'entrée (dates de début et de fin).
EXECUTER ('begin T2T_collect_allx (SYSDATE - 40, SYSDATE); end;') ORA_DB;
Exemple 2b
SELECT * FROM OPENQUERY(ORA_DB, 'begin T2T_collect_allx (SYSDATE - 40, SYSDATE ); end;')