5

我正在尝试使用 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 命令”,并将 SQLCommandVariable 设置为我的查询变量。

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

to_char(PT.CREATED_DTTM,'DD/MM/YYYY HH:MI:SS AM')

我对 SSIS 还是很陌生,所以我什至不确定我是否在正确的位置寻找这个错误的根源。任何人都有想法从这里去哪里?

按要求截图。如您所见,“来自变量”查询在预览模式下按预期工作,但是当我尝试执行它时出现错误。

控制流 数据源 调试错误

4

1 回答 1

1

我最终在 DataFlow 的“表达式”中设置了这个,而不是在 OLD DB 源上,确保变量仍然具有“EvaluateAsExpression”= True。

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

数据流源

于 2012-05-15T13:02:20.323 回答