【问题标题】:Calling Oracle stored procedure with output parameter from SQL Server使用 SQL Server 的输出参数调用 Oracle 存储过程
【发布时间】:2012-11-24 08:06:40
【问题描述】:

我在 SQL Server 2008 R2 中有一个 Oracle 链接服务器。 我需要执行Oracle存储过程(第一个是输出参数,第二个过程是输入参数):

CREATE OR REPLACE PROCEDURE my1.spGetDate(CurrentDate OUT VARCHAR2)
IS
BEGIN
-- set output parameter, no select statements
END;

CREATE OR REPLACE PROCEDURE my1.spDeleteOldRecords(CurrentDate IN VARCHAR2)
IS
BEGIN
-- conditional delete from oracle table, no select statements
END;

我没有找到关于这个问题的任何完整文档,只有带有无参数选择/非选择过程的简单示例,并且想知道如何调用这些过程,内部带有选择的过程,具有基本参数类型的多参数过程。

【问题讨论】:

    标签: sql sql-server oracle stored-procedures linked-server


    【解决方案1】:

    它应该像这样工作:

    DECLARE @dateval DATETIME
    
    EXECUTE ('begin my1.spGetDate(?); end;', @dateval OUTPUT) AT ORA_DBLINK_NAME;
    
    EXECUTE ('begin my1.spDeleteOldRecords(?); end;', @dateval) AT ORA_DBLINK_NAME;
    

    如果您有多个参数,它可能如下所示:

    EXECUTE ('begin my1.spProc(?,?,?,?); end;', @param_in_1, @param_in_2, @param_out_3 OUTPUT, @param_out_4 OUTPUT) AT DBLINK_NAME;
    

    【讨论】:

    • 谢谢,示例工作正确。可以在里面添加select的例子吗(只选择,选择和输出参数等)。
    • “选择”是什么意思?从 SQL Server 存储过程返回一些变量的方法?还是处理由 Oralce 存储过程运行的 SELECT 的结果集?
    • 我的意思是带有结果集的过程。
    • 据我所知,这是不可能的。似乎有使用一些 .NET 代码的解决方法,但我无法帮助您。
    • 1. “开始”和“结束”;作为声明的一部分是必需的。 2. SQL Server 链接服务器属性必须具有“RPC=True”和 RPC Out=True”。天哪,今天早上搜索了几个小时试图这样做(使用 INSERT INTO ... RETURNING)。谢谢!
    【解决方案2】:

    使用 REF CURSOR 并将该游标声明为 oracle 中的输出变量。使用 Ref Cursor 您可以从 Oracle 存储过程中检索结果集

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      相关资源
      最近更新 更多