【问题标题】:Execute an Oracle stored procedure from a SQL Server stored procedure从 SQL Server 存储过程执行 Oracle 存储过程
【发布时间】:2011-11-07 21:30:14
【问题描述】:

我有一个 SQL Server 存储过程,需要将信息发送到 Oracle 存储过程。

如何设置?它应该是链接服务器吗?以及如何编写代码来传递和执行存储过程?

【问题讨论】:

  • 您说的是 SQL(结构化查询语言),但您真正的意思是 SQL Server(Microsoft 关系数据库系统)——对吗? Oracle 也可以与 SQL 一起使用——IBM DB2、Informix、Firebird、MySQL 也是如此——你可以命名它.....
  • 对,SQL Server(我假设你为我编辑了它):)
  • 我认为这就是您的意思 - 所以是的,我相应地更新了您的帖子。

标签: sql-server oracle stored-procedures


【解决方案1】:

你也可以使用:

DECLARE @outputParameter int
EXEC ('BEGIN <procedureName>(?,?); END;', @inputParameter , @outputParameter OUTPUT) at <linkedServerName>

这允许捕获输出参数

【讨论】:

    【解决方案2】:

    Oracle 服务器中的“TestingProcedure”过程。

    SQL Server 中的链接服务器“LinkedServer”。

    在 SQL Server 示例中调用 TestingProcedure:

    EXECUTE ('begin TestingProcedure; end;') AT LinkedServer;
    

    【讨论】:

      【解决方案3】:

      这是我可能会从一开始就尝试的语法:

      SELECT * FROM OPENQUERY(<linked server name>, '{CALL <oracle sp>}')
      

      我所看到的(我自己没有尝试过)是你也可以使用OPENQUERY调用一个Oracle函数,然后可以调用存储过程,或者你可以将存储过程变成一个函数。然后,您与 SQL Server 的连接将如下所示:

      SELECT * FROM OPENQUERY(<linked server name>, 'SELECT <oracle function> FROM dual')
      

      【讨论】:

      • 所以,让我再扔一个扳手,我将在 Oracle 上执行一个存储过程,它接收来自我的输入参数并有一个我需要捕获的输出参数......我应该使用什么语法使用?
      • 使用我回答中的语法来获取输出参数。
      【解决方案4】:

      结果我最终不得不使用 Microsoft 的 CLR 并编写自己的小型 C# 应用程序来处理在服务器之间推送的变量。这是我所做的:

      1. C# 应用程序在 windows 中的计划任务上启动
      2. 应用程序执行 SQL Server 存储过程并获取返回值
      3. 然后应用程序使用适当的值执行 Oracle 存储过程

      【讨论】:

        猜你喜欢
        • 2019-02-05
        • 2015-08-28
        • 2019-04-03
        • 2010-12-11
        • 1970-01-01
        • 2019-12-03
        • 1970-01-01
        • 2013-10-10
        • 2015-06-18
        相关资源
        最近更新 更多