使用输出参数调用 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语句怎么写如题 谢谢了