我正在尝试使用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"查询在预览模式下按预期工作,但是当我尝试执行它时,我收到错误.

我最终在数据流上的“表达式”中设置它,而不是在旧数据库源上,确保变量仍然具有“EvaluateAsExpression”= True。
您还可以看到我已从 OLE DB 更新为使用Attunity Oracle 连接器。

| 归档时间: |
|
| 查看次数: |
11627 次 |
| 最近记录: |