今天碰到同样的SQL,只是连接DB的方式不同而造成以下语句不能正常执行。

/**//* Formatted on 2007/06/06 10:24 (Formatter Plus v4.8.7) */
SELECT ID, LEVELS, NVL (NAME, 'ゼ㏑') NAME, url, style, owner, seq,
(CASE LEVELS
WHEN 'B'
THEN SUBSTR (ID, 1, 2)
ELSE SUBSTR (ID, 3, 2)
END
) AS PARENT,
ATTRIBUTE
FROM a4rsys_menu
WHERE SUBSTR (ID, 1, 2) = '18'
AND (LEVELS = 'B' OR (LEVELS = 'C' AND ATTRIBUTE NOT IN ('D', 'T')))
ORDER BY LEVELS, PARENT, seq, SUBSTR (style, 1, 1)

/**//* Formatted on 2007/06/06 10:24 (Formatter Plus v4.8.7) */
SELECT ID, LEVELS, NVL (NAME, 'ゼ㏑') NAME, url, style, owner, seq,
(CASE LEVELS
WHEN 'B'
THEN SUBSTR (ID, 1, 2)
ELSE SUBSTR (ID, 3, 2)
END
) AS PARENT,
ATTRIBUTE
FROM a4rsys_menu
WHERE SUBSTR (ID, 1, 2) = '18'
AND (LEVELS = 'B' OR (LEVELS = 'C' AND ATTRIBUTE NOT IN ('D', 'T')))
ORDER BY LEVELS, PARENT, seq, SUBSTR (style, 1, 1)
连接DB方式:
成功:Application("SYSDB") = "Provider=MSDAORA.1;User ID=MCSAP1;Password=MCSAP1;data source=PNBRS"
失败:Application("MADB") = "Provider=OraOLEDB.Oracle.1;User ID=MASAP1;Password=MASAP1;data source=PNBRS"
总结:
OleDb 方式不支持 CASE When Function
SQL CASE WHEN 函数问题
本文探讨了在使用不同数据库连接方式时,特定 SQL 查询语句的执行问题。具体表现为当使用 OleDb 方式连接 Oracle 数据库时,带有 CASE WHEN 的查询无法正常执行。通过对比两种不同的连接配置,指出了 OleDb 对 CASE WHEN 函数的支持限制。
2万+

被折叠的 条评论
为什么被折叠?



