从SQL Server调用具有输出参数的Oracle存储过程

14

我在 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;

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

2个回答

13

它应该像这样工作:

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 存储过程返回某些变量的一种方式吗?还是处理由 Oracle 存储过程运行的 SELECT 的结果集? - Codo
我指的是带有结果集的过程。 - David Levin
据我所知,这是不可能的。似乎有一些使用 .NET 代码的解决方法,但我无法帮助你处理。 - Codo
2
  1. "begin" 和 "end;" 是语句的必要部分。
  2. SQL Server 链接服务器属性必须具有“RPC=True”和“RPC Out=True”。天啊,今天早上我花了几个小时搜索这个(使用 INSERT INTO ... RETURNING)。谢谢!
- leqid
1
据我所知,这是不可能的。 - Codo
显示剩余3条评论

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接