最近作统计报表,使用toad发现一些问题,记录如下,toad的版本是7.6.0.11:
select * from v$version
BANNER
----------------------------------------------------------------
Oracle8i Enterprise Edition Release 8.1.7.4.0 - Production
PL/SQL Release 8.1.7.4.0 - Production
CORE 8.1.7.0.0 Production
TNS for Solaris: Version 8.1.7.4.0 - Production
NLSRTL Version 3.4.1.0.0 - Production
SELECT *
FROM nls_database_parameters
WHERE parameter = 'NLS_CHARACTERSET'
PARAMETER VALUE
------------------------------ ----------------------------------------
NLS_CHARACTERSET US7ASCII
# 建立测试数据:
CREATE TABLE t
( ID INT,c VARCHAR(8),s INT);
insert into t values (1,'卫生材料',1);
insert into t values (2,'取消',2);
insert into t values (3,'其他',3);
insert into t values (4,'卫生材料',4);
insert into t values (5,'其他',5);
commit ;
SELECT SUM (DECODE (c, '卫生材料', s, 0)), SUM (DECODE (c, '取消', s, 0)),
SUM (DECODE (c, '其他', s, 0))
FROM t
很奇怪SUM (DECODE (c, '卫生材料', s, 0))的结果是0,不知道为什么?
其他toad版本没有这个问题,另外我发现执行:
SUM(DECODE(C,'卫蒢材料',S,0)) SUM(DECODE(C,'取消',S,0)) SUM(DECODE(C,'艱他',S,0))
----------------------------- ------------------------- -------------------------
0 2 8
卫生材料 =》卫蒢材料,其他=》艱他
但是为什么'其他'的结果没有错呢?使用高版本的toad就没有这个问题。
并且奇怪的是如果数据库是10G(字符集一样),执行的结果就正常,不会出现‘卫生材料 =》卫蒢材料’
的情况。