2010-07-12 68 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