使用输出参数调用Oracle存储过程
我正在使用SSIS 2008,调用具有输出参数的Oracle存储过程时遇到问题 我在SqlPlus中调用存储过程如下:使用输出参数调用Oracle存储过程,oracle,ssis,Oracle,Ssis,我正在使用SSIS 2008,调用具有输出参数的Oracle存储过程时遇到问题 我在SqlPlus中调用存储过程如下: var vresult number; exec my_stored_procedure(:vresult); print vresult; declare myVar number; myStatement varchar2(50); begin myStatement:='exec myProc(:1)'; execute immediate myStat
var vresult number;
exec my_stored_procedure(:vresult);
print vresult;
declare
myVar number;
myStatement varchar2(50);
begin
myStatement:='exec myProc(:1)';
execute immediate myStatement using output myVar;
end;
这些语句起作用,我得到了所需的输出。我尝试在SSIS中执行类似的操作,但我需要重复执行,可能是在ForEach或脚本中,使用调用存储过程的结果更新临时结果集(存储过程生成一个数字,我需要将该数字添加到结果集中的每一行,该结果集中只保存一些状态信息)
我尝试了很多不同的方法,结果总是出现“无效语句”或类似的错误
我还尝试了以下方法:
问题的关键似乎是存储过程的输出参数
我已尝试使用Oracle提供程序进行OLE DB。有什么想法吗?如果您试图调用Oracle PLSQL中的存储过程,此链接非常简短。 如果您使用Java,那么。语句对象 java.sql.callables语句; ps.registerOutParameter(parameterIndex,sqlType)
同样,.Net或任何其他平台必须具有相同的信念。希望如此。我想出了一个有效的解决方案:
- 使用“declare”和“end”构造
- 结合“立即执行”
- 将“using”语句添加到exec immediate to inject变量的末尾
var vresult number;
exec my_stored_procedure(:vresult);
print vresult;
declare
myVar number;
myStatement varchar2(50);
begin
myStatement:='exec myProc(:1)';
execute immediate myStatement using output myVar;
end;
将此脚本粘贴到执行SQL任务中,设置任务的属性,它就可以工作了
我是Oracle新手,但看起来:1符号是变量的占位符。您也可以使用sqlplus来测试这一点——只需将代码保存在文件中,然后使用命令行上的@选项启动sqlplus
唯一的问题是:我无法获取在SSI中使用的变量值,但这是另一个问题。检查tis post:从SQL Server Integration Services运行Oracle包
问候你就快到了。为了从SSIS中的Oracle存储过程中检索输出参数的值,下面是对我有效的方法 在执行SQL任务中,将其粘贴到SQL语句框中
declare
vresult number;
begin
my_stored_procedure(vresult);
?:=vresult;
end;
在参数映射中,通过将方向设置为“output”,参数名称设置为“0”(如果是第一个参数),确保将SSIS变量映射到存储过程的此输出
PS:确保Oracle输出变量数据类型与SSIS变量匹配
谢谢
谢谢你的回复。我已经有了这些信息,我的问题特别与SQL Server Integration Services(SSIS)有关。我在SSIS中已经有一段时间了,但是您是否将参数方向设置为输出?是的,我将参数方向设置为输出,并且到目前为止已经检查了大约1000次:)