使用open查询函数从sql server执行oracle存储过程

时间:2009-10-30 20:36:52

标签: sql-server-2005 oracle tsql

您可以使用open query函数确认是否已成功从sql server执行了oracle存储过程。如果是,怎么样?因为我在使用OPENQUERY函数执行带参数的存储过程时遇到问题。

2 个答案:

答案 0 :(得分:2)

最后找到了一些解决方案 - 问题的关键(对我们而言)是默认情况下,对链接服务器禁用RPC。需要将Rpc,Rpc Out和Use Remote Collat​​ion的参数设置为true。更多信息:

http://blog.sqlauthority.com/2007/10/18/sql-server-2005-fix-error-msg-7411-level-16-state-1-server-is-not-configured-for-rpc/

您使用的解决方案取决于程序输出要求。第一个示例返回输出值。第二个示例没有返回输出值(在后续查询中收集数据)。

示例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