最後に、いくつかの解決策を突き止めました。問題の鍵は(私たちにとって)、デフォルトでリンクサーバーのRPCが無効になっていることです。 Rpc、Rpc Out、およびUseRemoteCollationのパラメーターをtrueに設定する必要があります。詳細:
使用するソリューションは、プロシージャの出力要件によって異なります。最初の例は出力値を返します。 2番目の例では、出力値は返されません(データは後続のクエリで収集されます)。
例1
プロシージャT2T_collect_allには、2つの入力パラメータ(開始日と終了日)と1つの出力パラメータ(行数)があります。
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 ='yyyy / mm / dd'
SET @ l_i_parameter3 ='2009/12/31'
SET @ l_i_parameter4 ='yyyy / 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
)AT ORA_DB;
詳細: http://blogs.msdn.com/joaquinv/archive/2008/10/23/execute-oracle-stored-procedure-in-sql-server.aspx
例2a
プロシージャT2T_collect_allxには、2つの入力パラメータ(開始日と終了日)しかありません。
EXECUTE('begin T2T_collect_allx(SYSDATE-40、SYSDATE); end;')ORA_DB;
例2b
SELECT * FROM OPENQUERY(ORA_DB、'begin T2T_collect_allx(SYSDATE-40、SYSDATE); end;')