2010-07-12 67 views
0

我的Oracle查询生成正确的结果集,但数据以奇数字符显示,如下图所示的块所示。Oracle wm_concat查询返回具有奇数字符的结果集

alt text http://lh3.ggpht.com/_VSEi5_hEznA/TDtsnM9HDnI/AAAAAAAAAD8/zoEzbEaKB9s/blocks.jpg

,你能想到的,为什么它会做到这一点,什么这些字符实际上是任何理由吗?以下是我正在使用的查询。提前致谢。

SELECT wmsys.wm_concat(userFirstName) AS firstNames 
    FROM COURSESECTION 
    JOIN CLASSCOORDINATOR on classcoord_sectionId = coursesect_sectionId 
    JOIN usr_USER on classcoord_coordinatorId = userId 
GROUP BY classcoord_sectionId; 

如果我使用相同的查询,但使用的转储(wmsys.wm_concat(列名)),然后我得到下面的图片中显示的数据。

alt text http://lh3.ggpht.com/_VSEi5_hEznA/TDx2dle4BmI/AAAAAAAAAEM/cP6opWer-Go/concat.jpg

+0

这些字符是你在SQL Plus中看到的吗? SQL Developer?在浏览器中,如果有的话,哪一个?数据类型是什么 - 每个字母看起来像2个字符。 – MJB 2010-07-12 19:45:40

+0

通过oracle sql developer查看结果集时会显示这些字符。如果我将数据导出到xls,它们也会显示出来。如果导出到xml,它们将变成空格。 – Ben 2010-07-12 20:19:17

回答

1

DUMP是我的出发点调查字符集问题的时候。

select wmsys.wm_concat('êõôó'), dump(wmsys.wm_concat('êõôó')) 
from dual connect by level < 3; 

在我的数据库(AL32UTF8如通过查询从V $ NLS_PARAMETERS的NLS_CHARACTERSET参数),这将返回预期。

如何选择一个简单的userFirstName?

我怀疑这些值来自多字符集环境,但不知何故被视为单个字符集数据。


编辑补充:

我能够重现此使用下列内容:

select * from v$nls_parameters 
where parameter = 'NLS_NCHAR_CHARACTERSET'; 

AL16UTF16 

create table t (v nvarchar2(3)); 
insert into t values ('a'); 
select dump(v) from t; 
select wmsys.wm_concat(v), v, dump(v), dump(wmsys.wm_concat(v)) from t 
group by v; 

为了补救,您可以尝试将字符串转换为一标准的VARCHAR2

select wmsys.wm_concat(cast(v as varchar2(3))) 
from t 
group by v; 
+0

当我用dump(wmsys.wm_concat(userFirstName))进行选择时,结果集会返回每个由0个字符数字分隔的字符编号(如上所示)。这是你问的吗? – Ben 2010-07-13 17:33:22