【发布时间】: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