SSIS中Oracle OLE DB Source是否支持多SQL命令执行?
关于OLE DB Source执行多条SQL命令的问题
首先直接给结论:OLE DB Source组件默认不支持在单条SQL语句中执行多个独立命令,你尝试的Call A GO Select * from XXX或者分号分隔的写法都会报错,原因有两个:
GO是SQL Server工具的批处理分隔符,Oracle数据库本身并不识别这个关键字;- OLE DB Source的设计目标是获取单一结果集用于后续数据流处理,它会把整个SQL语句当作一个执行单元,若第一条命令(存储过程调用)没有返回结果集,组件就会因为无法获取预期的数据而报错。
给你两个可行的解决方案:
方案1:拆分任务(推荐)
把存储过程调用和数据查询拆成两个独立的SSIS任务:
- 先添加一个OLE DB Command组件,在其中执行无返回值的存储过程:
Call A(注意Oracle中无参数存储过程也可以直接写A;); - 再添加OLE DB Source组件,单独执行查询语句:
Select * from XXX。
这种方式逻辑清晰,符合SSIS组件的职责划分,也更容易调试和维护。
方案2:使用Oracle PL/SQL块返回结果集(进阶)
如果必须在一个组件里完成操作,可以用Oracle的BEGIN...END块结合游标来返回查询结果,示例代码如下:
BEGIN A; -- 调用存储过程 OPEN :result_cursor FOR SELECT * FROM XXX; END;
然后在OLE DB Source的配置中:
- 选择“SQL command”并输入上述PL/SQL块;
- 切换到“Result Set”选项卡,设置结果集类型为Full result set,并将
result_cursor映射到一个结果集变量; - 后续可以通过这个变量来获取查询到的数据。
不过这个方法需要你对Oracle PL/SQL和SSIS的结果集映射有一定了解,相对复杂,除非有特殊需求,否则更推荐方案1。
内容的提问来源于stack exchange,提问作者Cristina
相关产品推荐
相关产品推荐

