Alla fine abbiamo individuato alcune soluzioni:la chiave del problema (per noi) è che per impostazione predefinita gli RPC sono disabilitati per i server collegati. I parametri per Rpc, Rpc Out e Use Remote Collation devono essere impostati su true. Maggiori informazioni:
La soluzione utilizzata dipenderà dai requisiti di output della procedura. Il primo esempio restituisce un valore di output. Nel secondo esempio non vengono restituiti valori di output (i dati vengono raccolti in una query successiva).
Esempio 1
La procedura T2T_collect_all ha due parametri di input (date di inizio e fine) e un parametro di output (conteggio righe).
DICHIARA @l_i_parameter1 varchar(10)
DICHIARA @l_i_parameter2 varchar(10)
DICHIARA @l_i_parameter3 varchar(10)
DICHIARA @l_i_parameter4 varchar(10)
DICHIARA @l_o_parameter1 intero
SET @l_i_parameter1 ='01/10/2009'
SET @l_i_parameter2 ='aaaa/mm/gg'
SET @l_i_parameter3 ='31/12/2009'
SET @l_i_parameter4 ='aaaa/mm/gg'
SET @l_o_parameter1 =0
ESEGUI ( 'inizia T2T_collect_all(to_date(?, ?), to_date(?, ?), ? ); end;',
@l_i_parameter1,
@l_i_parameter2,
@l_i_parameter3,
@l_i_parameter4,
@l_o_parameter1 OUTPUT
) IN ORA_DB;
Ulteriori informazioni:http://blogs.msdn.com/joaquinv/archive/2008/10/23/execute-oracle-stored-procedure-in-sql-server.aspx
Esempio 2a
La procedura T2T_collect_allx ha solo due parametri di input (data di inizio e data di fine).
ESEGUI ('inizio T2T_collect_allx (SYSDATE - 40, SYSDATE); fine;') ORA_DB;
Esempio 2b
SELECT * FROM OPENQUERY(ORA_DB, 'begin T2T_collect_allx (SYSDATE - 40, SYSDATE ); end;')