您能否确认是否已使用开放查询功能从 sql server 成功执行了 oracle 存储过程。如果是,如何?因为我在使用 OPENQUERY 函数执行带参数的存储过程时遇到问题。
最佳答案
最终找到了一些解决方案 - 问题的关键(对我们来说)是默认情况下链接服务器禁用 RPC。 Rpc、Rpc Out 和 Use Remote Collation 的参数需要设置为 true。更多信息:
您使用的解决方案将取决于过程输出要求。第一个示例返回一个输出值。第二个示例不返回输出值(在后续查询中收集数据)。
示例1
过程 T2T_collect_all 有两个输入参数(开始日期和结束日期)和一个输出参数(行数)。
声明@l_i_parameter1 varchar(10)
声明 @l_i_parameter2 varchar(10)
声明@l_i_parameter3 varchar(10)
声明@l_i_parameter4 varchar(10)
声明@l_o_parameter1整数
设置@l_i_parameter1 = '2009/10/01'
SET @l_i_parameter2 = '年/月/日'
设置@l_i_parameter3 = '2009/12/31'
SET @l_i_parameter4 = '年/月/日'
设置@l_o_parameter1 = 0
EXECUTE('开始 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 只有两个输入参数(开始日期和结束日期)。
EXECUTE('开始T2T_collect_allx(SYSDATE - 40,SYSDATE);结束;')ORA_DB;
示例 2b
SELECT * FROM OPENQUERY(ORA_DB, '开始 T2T_collect_allx (SYSDATE - 40, SYSDATE); 结束;')
关于sql-server-2005 - 使用开放查询功能从sql server执行oracle存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1652168/