【问题标题】:SSIS and sending query with date to OracleSSIS 并将带日期的查询发送到 Oracle
【发布时间】:2015-04-28 05:16:45
【问题描述】:

我正在尝试创建一个流程以将数据从 Oracle 表中提取到 SQL Server 表中。我正在向 Oracle 发送以下查询以获取数据:

select distinct CHLD.id,
       nvl(chld_c_spl, 'N'),
       to_char(chld_d_start, 'YYYY-MM-DD') chld_d_start,
       to_char(chld_d_end, 'YYYY-MM-DD') chld_d_end
  from child chld, 
       picture ptct
 where CHLD.id = PTCT.chld_id
   and nvl(chld_d_end, sysdate) >= to_date('01-JAN-2014')
   and chld_c_veri in ('HC','DR')
   and nvl(ptct_term, ptct_end) >= to_date('01-JAN-2014')

当我在 Oracle 中运行查询时,我返回了 505 行。当我执行 SSIS 包时,插入了 1,504 行。由于某种原因,SSIS 传递的查询似乎没有查看 ptct 表的 where 子句 (nvl(ptct_term, ptct_end) >= to_date('01-JAN-2014')),因为所有额外的行都是图片 (ptct) 表中没有有效条目。

有人对这里发生的事情有什么建议吗?原始查询在 ptct 表上使用了 exists 子句而不是 join,但它不起作用,所以我转换为 join。当存在子句时,看到的结果与上述类似。

【问题讨论】:

  • 你能扩展一下你的 SSIS 包吗?当您将查询发送到 oracle 时,您是否通过执行 SQL 任务执行此操作,为您的 Oracle DB 设置特定的连接字符串?还是您使用的是 OLEDB 源?执行包时是否通过暂存区发送结果集或查询暂存区?
  • 我使用 Oracle 连接管理器将数据流任务与 OLE DB 源一起使用。 Oracle 连接管理器正在使用 Oracle Provider for OLE DB,而 db 在 tnsnames.ora 文件中定义。数据访问模式 = SQL 命令和 SQL 命令文本 = 上面的查询。然后我只是将它发送到 ADO NET 目标,该目标是 SQL Server 连接,直接连接到查询中包含 4 列的表中。

标签: sql-server oracle ssis sql-server-2008-r2


【解决方案1】:

很可能您的 NLS 设置在您的 Oracle 查询工具(sqlplus、toad...)和 SSIS 之间是不同的。尝试明确给出您的日期,如 to_date('2014-01-01','YYYY-MM-DD')。

select distinct CHLD.id,
       nvl(chld_c_spl, 'N'),
       to_char(chld_d_start, 'YYYY-MM-DD') chld_d_start,
       to_char(chld_d_end, 'YYYY-MM-DD') chld_d_end
  from child chld, 
       picture ptct
 where CHLD.id = PTCT.chld_id
   and nvl(chld_d_end, sysdate) >= to_date('2014-01-01','YYYY-MM-DD')
   and chld_c_veri in ('HC','DR')
   and nvl(ptct_term, ptct_end) >= to_date('2014-01-01','YYYY-MM-DD')

【讨论】:

  • 太棒了!谢谢阿蒂拉,那行得通。如果允许,我会在几分钟内接受您的回答。
猜你喜欢
  • 2020-12-28
  • 2015-08-16
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 2011-01-23
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多