【发布时间】:2018-04-06 18:40:31
【问题描述】:
错误是:
无法从链接服务器的 OLE DB 提供程序“OraOLEDB.Oracle”获取行的数据
我正在尝试将 Oracle SQL 查询转换为 T-SQL。运行此版本的查询时出现错误:
SELECT B.SAAS_ACTIVITY, A.LAST_NAME, A.FIRST_NAME, A.MIDDLE_NAME,
B.DIVISION_CODE, B.GRANT_YEAR, B.ACTIVITY_CODE, B.ACT_ACTIVITY_CODE,
B.COST_CENTER, B.HOURS_BEG, B.LEAVE_ADJ_HOURS, B.CURRENT_MONTH,
B.HOURS_BEG + B.LEAVE_ADJ_HOURS TOTAL_HOURS, B.PERCENT_WORK,
B.DIV_MONTHLY_SALARY, C.DIV_DESCRIPTION,
B.DIV_SALARY_PLUS_FRINGE - B.DIV_MONTHLY_SALARY FRINGE,
B.DIV_SALARY_PLUS_FRINGE
FROM ORCL_RIVENDELL..BP2K.EMT_EMPLOYEE A,
ORCL_RIVENDELL..BP2K.LABOR_DISTRIB_MASTER_DETAIL B,
ORCL_RIVENDELL..BP2K.ACT_DIVISION C
WHERE A.ID = B.ID
AND B.FISCAL_YEAR = :P_SFY
AND B.DIVISION_CODE = C.DIVISION_CODE
AND C.DIV_SFY = :P_SFY
AND B.CURRENT_MONTH >= CASE WHEN :P_FROM_MONTH is null THEN 2
ELSE :P_FROM_MONTH
END
AND B.CURRENT_MONTH <= CASE WHEN :P_TO_MONTH is null THEN 13
ELSE :P_TO_MONTH
END
AND B.SAAS_ACTIVITY >= CASE WHEN :P__FROM_OFFICE is null THEN '4701'
ELSE :P_FROM_OFFICE
END
AND B.SAAS_ACTIVITY <= CASE WHEN :P__TO_OFFICE is null THEN '4705'
ELSE :P_TO_OFFICE
END
AND B.DIVISION_CODE >= CASE WHEN :P__FROM_DIV is null THEN '0011'
ELSE :P_FROM_DIV
END
AND B.DIVISION_CODE <= CASE WHEN :P__TO_DIV is null THEN '9999'
ELSE :P_TO_DIV
END
AND B.DIVISION_CODE <> '1050'
ORDER BY B.DIVISION_CODE, A.LAST_NAME, B.CURRENT_MONTH
但如果删除连接以获取 DIV_DESCRIPTION,并且只使用 DIV_CODE,则查询运行正常:
SELECT B.SAAS_ACTIVITY, A.LAST_NAME, A.FIRST_NAME, A.MIDDLE_NAME,
B.DIVISION_CODE, B.GRANT_YEAR, B.ACTIVITY_CODE, B.ACT_ACTIVITY_CODE,
B.COST_CENTER, B.HOURS_BEG, B.LEAVE_ADJ_HOURS, B.CURRENT_MONTH,
B.HOURS_BEG + B.LEAVE_ADJ_HOURS TOTAL_HOURS, B.PERCENT_WORK,
B.DIV_MONTHLY_SALARY, B.DIVISION_CODE,
B.DIV_SALARY_PLUS_FRINGE - B.DIV_MONTHLY_SALARY FRINGE,
B.DIV_SALARY_PLUS_FRINGE
FROM ORCL_RIVENDELL..BP2K.EMT_EMPLOYEE A,
ORCL_RIVENDELL..BP2K.LABOR_DISTRIB_MASTER_DETAIL B
WHERE A.ID = B.ID
AND B.FISCAL_YEAR = :P_SFY
AND B.CURRENT_MONTH >= CASE WHEN :P_FROM_MONTH is null THEN 2
ELSE :P_FROM_MONTH
END
AND B.CURRENT_MONTH <= CASE WHEN :P_TO_MONTH is null THEN 13
ELSE :P_TO_MONTH
END
AND B.SAAS_ACTIVITY >= CASE WHEN :P__FROM_OFFICE is null THEN '4701'
ELSE :P_FROM_OFFICE
END
AND B.SAAS_ACTIVITY <= CASE WHEN :P__TO_OFFICE is null THEN '4705'
ELSE :P_TO_OFFICE
END
AND B.DIVISION_CODE >= CASE WHEN :P__FROM_DIV is null THEN '0011'
ELSE :P_FROM_DIV
END
AND B.DIVISION_CODE <= CASE WHEN :P__TO_DIV is null THEN '9999'
ELSE :P_TO_DIV
END
AND B.DIVISION_CODE <> '1050'
ORDER BY B.DIVISION_CODE, A.LAST_NAME, B.CURRENT_MONTH
获取 DIV_DESCRIPTION 并不是绝对关键,但我想了解错误发生的原因(我使用 Oracle SQL 的次数远多于 TSQL)。该列在 ACT_DIVISION 表和 LABOR_DISTRIB_MASTER_DETAIL 表中都定义为 VARCHAR2(12)。这是数据类型不匹配的问题,还是其他原因?
谢谢, 哈利
【问题讨论】:
标签: sql-server oracle tsql linked-server