使用输出参数调用 Oracle 存储过程

Posted

技术标签:

【中文标题】使用输出参数调用 Oracle 存储过程【英文标题】:Call Oracle stored proc with output parameter 【发布时间】:2011-05-10 14:31:47 【问题描述】:

我正在使用 SSIS 2008,但在调用具有输出参数的 Oracle 存储过程时遇到问题。

我在 SqlPlus 中这样调用存储过程:

var vresult number;
exec my_stored_procedure(:vresult);
print vresult;

语句有效,我得到了我需要的输出。我正在尝试在 SSIS 中做类似的事情,但我需要重复执行此操作,可能在 ForEach 或脚本中使用调用存储过程的结果更新临时结果集(存储过程生成一个数字,我需要将该数字添加到仅包含一些状态信息的结果集中的每一行。

我尝试了很多不同的方法,但总是以“无效语句”或类似错误告终。

我也尝试了以下方法:

    How to resolve SQL query parameters mapping issues while using Oracle OLE DB provider?

    Update a row in oracle using OLEDB command(SSIS)

    Oracle variables

问题的关键似乎是存储过程的输出参数。

我已尝试使用 Oracle Provider for OLE DB。有什么想法吗?

【问题讨论】:

我在 SSIS 有一段时间了,但是您是否将参数方向设置为输出? 是的,我将参数方向设置为输出,现在已经检查了大约一千次:) 【参考方案1】:

如果您尝试调用 Oracle PLSQL 中的存储过程,此链接非常简短。 http://plsql-tutorial.com/plsql-passing-parameters-procedure-function.htm

如果您正在使用 Java,那么。语句对象 java.sql.CallableStatement ps; ps.registerOutParameter(parameterIndex, sqlType);

同样,.Net 或任何其他平台必须具有相同的信念。希望如此。:)

【讨论】:

感谢您的回复。我已经有了这些信息,我的问题与 SQL Server Integration Services (SSIS) 相关。【参考方案2】:

我想出了一个可行的解决方案:

使用“declare”和“end”构造 结合“立即执行” 将“using”语句添加到 exec 立即数的末尾以注入变量

所以实现这个的脚本可能看起来像这样:

declare
myVar number;
myStatement varchar2(50);
begin
    myStatement:='exec myProc(:1)';
    execute immediate myStatement using output myVar;
end;

将此脚本粘贴到执行 SQL 任务中,设置任务的属性,它就可以工作了!

我是 Oracle 的新手,但看起来 :1 符号是变量的占位符。您也可以使用 sqlplus 进行测试 - 只需将代码保存在文件中,然后使用命令行上的 @ 选项启动 sqlplus。

唯一的问题:我无法获取用于 SSIS 的变量值,但这是另一个问题。

【讨论】:

【参考方案3】:

查看这篇文章:从 SQL Server Integration Services 运行 Oracle 包

http://www.mssqltips.com/sqlservertip/2724/run-an-oracle-package-from-sql-server-integration-services/

问候

【讨论】:

【参考方案4】:

你快到了。为了从 SSIS 中的 Oracle 存储过程中检索输出参数的值,这对我有用

在执行 SQL 任务中,将其粘贴到 SQL 语句框中

declare
vresult number;

begin
   my_stored_procedure(vresult);
   ?:=vresult;
end;

在参数映射中,确保将 SSIS 变量映射到存储过程的此输出,方法是将方向设置为“输出”并将参数名称设置为“0”(如果它是第一个参数)

PS:确保 Oracle 输出变量数据类型与您的 SSIS 变量匹配

谢谢 梅祖埃

【讨论】:

以上是关于使用输出参数调用 Oracle 存储过程的主要内容,如果未能解决你的问题,请参考以下文章

oracle中怎么执行带有输出参数的存储过程,在程序中我知道怎么调用,

oracle中怎么执行带有输出参数的存储过程,在程序中我知道怎么调用,

调用使用 Microsoft SQL Server 的输出参数的 Oracle 存储过程

plsql调用oracle存储过程有输入参数和输出参数 sql语句怎么写如题 谢谢了

使用 Python 和 Cx_Oracle 调用带有 XMLTYPE 输入和输出参数的 Oracle 存储过程

oracle存储过程如何输出信息