0x80040e51描述:"提供程序无法派生参数信息,并且尚未调用SetParameterInfo."

sli*_*sec 5 oracle ssis

我正在尝试使用where子句执行针对oracle的查询

BETWEEN date AND date2
Run Code Online (Sandbox Code Playgroud)

第一轮研究表明,oracle OLEDB提供程序不允许参数化查询,这些应该在变量中设置.所以我创建了3个变量.2保存我正确填充的日期,一个保存查询,表达式以:

 BETWEEN to_date('" + (DT_WSTR, 30)@[User::lastRun]  + "','DD/MM/YYYY HH:MI:SS AM') AND to_date('" + (DT_WSTR, 30) @[User::thisRun] + "','DD/MM/YYYY HH:MI:SS AM')"
Run Code Online (Sandbox Code Playgroud)

当我在表达式构建器中单击"评估表达式"时,它会正确评估

BETWEEN to_date('1/1/1900','DD/MM/YYYY HH:MI:SS AM') AND
to_date('1/1/2010','DD/MM/YYYY HH:MI:SS AM')
Run Code Online (Sandbox Code Playgroud)

而且我能够使用其他工具成功地对抗oracle.

但是当我尝试运行包时,我会收到:

[mySource 1 ]错误:SSIS错误代码DTS_E_OLEDBERROR.发生OLE DB错误.错误代码:0x80040E51.OLE DB记录可用.来源:"OraOLEDB"Hresult:0x80040E51描述:"提供者无法导出参数信息,并且尚未调用SetParameterInfo.".

其中mySource是OLE DB源.它将AccessMode设置为"SQL Command From Variable",并将SQLCommandVariable设置为我的查询变量.

我还尝试手动设置所有输出外部列,并更改我在查询中选择的一些值以抛弃oracle DATE数据类型:

to_char(PT.CREATED_DTTM,'DD/MM/YYYY HH:MI:SS AM')
Run Code Online (Sandbox Code Playgroud)

我仍然是SSIS的新手,所以我甚至不确定我是否正在寻找这个错误根源的正确位置.任何人都有想法从哪里开始?

截图请求.正如您所看到的,"from variable"查询在预览模式下按预期工作,但是当我尝试执行它时,我收到错误.

控制流 数据源 调试错误

sli*_*sec 1

我最终在数据流上的“表达式”中设置它,而不是在旧数据库源上,确保变量仍然具有“EvaluateAsExpression”= True。

您还可以看到我已从 OLE DB 更新为使用Attunity Oracle 连接器

数据流源