Oracle wm_concat查询返回具有奇数字符的结果集
我的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
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;
当我用dump(wmsys.wm_concat(userFirstName))进行选择时,结果集会返回每个由0个字符数字分隔的字符编号(如上所示)。这是你问的吗? – Ben 2010-07-13 17:33:22
这些字符是你在SQL Plus中看到的吗? SQL Developer?在浏览器中,如果有的话,哪一个?数据类型是什么 - 每个字母看起来像2个字符。 – MJB 2010-07-12 19:45:40
通过oracle sql developer查看结果集时会显示这些字符。如果我将数据导出到xls,它们也会显示出来。如果导出到xml,它们将变成空格。 – Ben 2010-07-12 20:19:17