SSIS执行Execute SQL Task报ORA-03291缺失STORAGE关键字错误如何处理
问题根因
该报错是Oracle Provider for OLE DB驱动在SSIS Execute SQL Task的执行上下文下,语法解析规则和Oracle原生客户端不同导致的:驱动会错误识别语句末尾的分号或DROP STORAGE子句的格式,触发误报。
可行解决方案
- 方案1:删除SQL语句末尾的分号
将原语句修改为truncate table myTable DROP STORAGE,去掉末尾的分号后重新执行,SSIS的OLE DB驱动不会再将分号识别为语法组成部分,可正常解析执行。 - 方案2:将语句封装为Oracle匿名块执行
用匿名块绕过OLE DB驱动的前置语法校验,直接让Oracle内核解析语句,代码如下:BEGIN EXECUTE IMMEDIATE 'truncate table myTable DROP STORAGE'; END; - 方案3:省略
DROP STORAGE子句
OracleTRUNCATE TABLE语句默认行为就是DROP STORAGE,如果没有特殊的保留存储需求,可直接简化语句为truncate table myTable,简化后的语句兼容性更高,不会触发驱动解析错误。 - 方案4:更换连接驱动
替换当前使用的Oracle Provider for OLE DB为Oracle官方ODP.NET托管驱动或微软官方Oracle SSIS连接器,这类驱动对Oracle原生语法的兼容性更好,不会出现这类语法误判问题。
内容的提问来源于stack exchange,提问作者Douglas
相关产品推荐
相关产品推荐

