【问题标题】:Query from oracle doesn't work in SSIS来自 oracle 的查询在 SSIS 中不起作用
【发布时间】:2012-03-22 00:08:19
【问题描述】:

由于某些原因,此查询在 SSIS 中不起作用

Select 
    IDLOGARCHIVOS, 
    NOMBREARCHIVO, 
    FECHACREACION 
from 
   ATEN_TDCMARK.LOGARCHIVOS 
where 
    trunc(FECHACREACION, 'DDD') = trunc(sysdate, 'DDD')

但是当我在 Toad 中测试时效果很好,我做错了什么?有没有不同的方法来处理日期?而且我知道问题与日期比较有关,因为当我删除此条件时,查询返回值

【问题讨论】:

  • 究竟显示了什么错误?
  • 不抛出错误只不带记录
  • 你能在没有“where”部分的情况下测试查询,这样我们就可以确定问题出在 trunc(sysdate, 'DDD') 上

标签: sql oracle ssis etl


【解决方案1】:

这适用于蟾蜍?由于to_date(sysdate, 'dd/mm/yyyy'),我原以为它会失败。您正在尝试将日期转换为日期,Oracle 通常会在该日期上引发错误。

您似乎想要做的是truncate 仅包括年、月和日的日期,即没有时间组件。

这将是trunc(sysdate, 'DD')trunc(sysdate) 将返回与 'DD' 相同的值,并且它的同义词是默认值,但最好是明确的。

您的专栏FECHACREACION 是否也这样做?如果不是并且它是一个字符,我可以建议您将其存储为日期吗?

【讨论】:

  • 问题是我用小时和分钟存储日期,所以我所做的转换是格式化日期并只比较没有小时的日期。但查询有效
【解决方案2】:

对于系统日期,您必须在 ssis 中使用 GETDATE() 函数代替 sysdate..

for more information

【讨论】:

  • 如果你已经进行了相应的转换,那么你得到了什么错误?
  • 我相信 OP 的意思是 Execute SQL 任务实际上是使用 Oracle 数据库作为其源。所以他应该使用Oracle SQL,而不是TSQL。但这从问题中并不明显,所以我可能错了。
【解决方案3】:

首先要解决我的问题,我需要在我的机器上的 oracle 注册表中修改NS_LANG,位于(HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0)。然后我重新启动机器并根据@Ben 的答案修改了我的查询并在 etl OF SSIS 中工作

Select 
    IDLOGARCHIVOS, 
    NOMBREARCHIVO, 
    FECHACREACION 
from 
   ATEN_TDCMARK.LOGARCHIVOS 
where 
    trunc(FECHACREACION, 'DDD') = trunc(sysdate, 'DDD')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 2011-05-22
    • 1970-01-01
    • 2017-01-17
    • 2017-11-12
    相关资源
    最近更新 更多