您可以使用open query函数确认是否已成功从sql server执行了oracle存储过程。如果是,怎么样?因为我在使用OPENQUERY函数执行带参数的存储过程时遇到问题。
答案 0 :(得分:2)
最后找到了一些解决方案 - 问题的关键(对我们而言)是默认情况下,对链接服务器禁用RPC。需要将Rpc,Rpc Out和Use Remote Collation的参数设置为true。更多信息:
您使用的解决方案取决于程序输出要求。第一个示例返回输出值。第二个示例没有返回输出值(在后续查询中收集数据)。
示例1
程序T2T_collect_all有两个输入参数(开始和结束日期)和一个输出参数(行数)。
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
执行('开始T2T_collect_all(to_date(?,?),to_date(?,?),?);结束;',
@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('begin T2T_collect_allx(SYSDATE - 40,SYSDATE); end;')ORA_DB;
示例2b
SELECT * FROM OPENQUERY(ORA_DB,'begin T2T_collect_allx(SYSDATE - 40,SYSDATE); end;')
答案 1 :(得分:1)
我没有db,但是在Oracle proc上添加输出参数呢。然后在proc中填充它并将其返回给SQL Server。以下是click here
的示例HTH, 〜CK