sql-server-2005 - 使用开放查询功能从sql server执行oracle存储过程

标签 sql-server-2005 oracle t-sql

您能否确认是否已使用开放查询功能从 sql server 成功执行了 oracle 存储过程。如果是,如何?因为我在使用 OPENQUERY 函数执行带参数的存储过程时遇到问题。

最佳答案

最终找到了一些解决方案 - 问题的关键(对我们来说)是默认情况下链接服务器禁用 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 有两个输入参数(开始日期和结束日期)和一个输出参数(行数)。

声明@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/

相关文章:

php - 错误的T-SQL查询时sqlsrv_query不会返回false

sql - 如何将表值从一个数据库插入到另一个数据库?

oracle - 无法调用oracle存储过程和函数

sql-server - 为什么我的 tsql varbinary 数据被截断

sql-server-2008 - T-SQL 中更好的日期最小/最大函数

sql-server - 删除 SQL Server 2005 记录而不记录日志

c# - 将数百万条记录从平面文件插入 SQL Server 的陷阱是什么?

sql - 返回每组的前 n 条记录 Oracle SQL

oracle - 检查是否存在 PLS-00405 : subquery not allowed in this context

sql - 从具有公共(public)列的记录集中获取最大值