Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用输出参数调用Oracle存储过程_Oracle_Ssis - Fatal编程技术网

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

使用输出参数调用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

我正在使用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 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次:)