我正在尝试使用where子句(包括
)对oracle执行查询BETWEEN date AND date2
第一轮研究表明,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')"
当我在表达式构建器中单击“评估表达式”时,它会正确评估
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')
我能够使用其他工具成功地对抗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')
我还是SSIS的新手,所以我甚至不确定我是否正确找到了这个错误根源的正确位置。任何人都有想法从哪里开始?
根据要求截图。如您所见,“from variable”查询在预览模式下按预期工作,但当我尝试执行它时,我收到错误。
答案 0 :(得分:1)
我最终在DataFlow的“表达式”中设置了这个,而不是在OLD DB源上,确保变量仍然具有“EvaluateAsExpression”= True。
您还可以看到我已从OLE DB更新为使用Attunity Oracle connector。