【问题标题】:Why does DENSE_RANK cause an error when used in SSIS query against ORACLE using OLE DB?为什么 DENSE_RANK 在使用 OLE DB 对 ORACLE 进行 SSIS 查询时会导致错误?
【发布时间】:2015-12-10 22:58:05
【问题描述】:

这个查询:

SELECT
    DENSE_RANK() OVER (PARTITION BY UPPER(ANUMID), UPPER(PRODNUMID) ORDER BY DATE_ADDED ASC) AS DRANK
,   ANUMID
,   PRODNUMID
,   STATUS_FDATE
,   STATUS_XDATE
,   ROWSTATUS
FROM
    AGCOMN 

查询按 DATE_ADDED 从 1 到 x 对每组 ANUMID、PRODNUMID 中的行进行排名。在随后的查询中,DRANK=1 获取添加的最新行。

此查询在 ORACLE SQL Developer、我的本地计算机 SSIS 环境以及 TEST 服务器上的 SSIS OLE DB 源预览中有效,但在运行包时无效。

错误:

[OLE DB 源 1 [677]] 错误:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80040E14。 OLE DB 记录可用。来源:“OraOLEDB”Hresult:0x80040E14 描述:“ORA-00936:缺少表达式”。

环境:

  • 本地 - Windows XP、SQL BIDS 2008

  • 测试 - Windows7、SQL/BIDS 2008

此后我重写并简化了查询,将数据抓取到临时表中,然后使用 SQL Server 对记录数进行排名和减少。

有什么想法可以从一开始就找到 SQL 不起作用的根本原因吗?为什么预览版可以运行,但运行包却不行?

【问题讨论】:

  • 出于好奇,如果你做到了ORDER BY DATE_ADDED ASC) DRANK,它有用吗?我一直认为 AS 打得不好
  • 我没有发现 Oracle SQL 有任何问题。
  • 奇数。我想知道它在作为一个包运行时是否使用了不同的驱动程序——我在同一台机器上看到了 64 位和 32 位 Oracle 驱动程序之间的奇怪差异,其中一个用于调试,另一个用于发布包执行。您的项目是否设置为在调试中以 32 位模式执行?我相信很多人设置项目设置 Debugging/Run64BitRuntime 来调试 Oracle。

标签: oracle ssis oledb dense-rank


【解决方案1】:

我发现了问题。在 SQL 中间使用双破折号嵌入了 cmets。当我删除它们时,查询有效。当我“清理”查询以将其发布到此公共论坛时,我在原始帖子中删除了它们。

在 32 位和 64 位模式下都是如此。我还从 AS DRANK 短语中删除了 AS,这在这种情况下没有任何区别。感谢您的想法。

【讨论】:

  • 是的,之前肯定见过。 /* 标准 */ 根据我的经验,多行 cmets 似乎工作正常。 (顺便说一句,在 Stack Overflow 上接受你自己的答案也没问题……)
猜你喜欢
  • 2016-11-16
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多