我正在尝试使用 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 还是很陌生,所以我什至不确定我是否在正确的位置寻找这个错误的根源。任何人都有想法从这里去哪里?
按要求截图。如您所见,“来自变量”查询在预览模式下按预期工作,但是当我尝试执行它时出现错误。