我正在使用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?
问题的关键似乎是存储过程的输出参数。
我尝试过使用Oracle Provider for OLE DB。有什么想法吗?
答案 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
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包
问候
答案 3 :(得分:0)
你快到了。为了从SSIS中的Oracle存储过程中检索输出参数的值,这对我有用
在“执行SQL”任务中,将其粘贴到SQL语句框
中declare
vresult number;
begin
my_stored_procedure(vresult);
?:=vresult;
end;
在参数映射中,通过将方向设置为"输出"确保将SSIS变量映射到存储过程的此输出。和参数名称为" 0" (如果是第一个参数)
PS:确保Oracle输出变量数据类型与您的SSIS变量匹配
由于 Mezue