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

时间:2011-05-10 14:31:48

标签: oracle ssis

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

我在SqlPlus中调用存储过程,如下所示:

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

语句有效,我得到了我需要的输出。我试图在SSIS中做类似的事情,但我需要反复这样做,可能在ForEach或脚本中更新临时结果集,调用存储过程的结果(存储过程生成一个数字,我需要将该数字添加到结果集中的每一行,只保存一些状态信息。)

我尝试了很多不同的方法,最终总是出现'无效声明'或类似的错误。

我也尝试了以下方法:

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

  2. Update a row in oracle using OLEDB command(SSIS)

  3. Oracle variables

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

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

4 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

我提出了一个有效的解决方案:

  • 使用'declare'和'end'构造
  • 与'execute immediate'结合使用
  • 将'using'语句添加到exec immediate的末尾以注入变量

因此,实现此目的的脚本可能如下所示:

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

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

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

唯一的问题:我无法获得在SSIS中使用的变量值,但这是另一个问题。

答案 2 :(得分:0)

检查帖子:从SQL Server Integration Services运行Oracle包

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

问候

答案 3 :(得分:0)

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

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

declare
vresult number;

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

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

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

由于 Mezue